题目
做题思路
首先观察了解题意,找出其真正意义(即发现其判断输入合法的规律)。
观察到第三条每一次的延伸,b都是多了一个“A”,同时“ca”也是“a”的翻倍,所以可以得到结论a*b = c,符合这个条件的就是对的,不符合就是错的。
(
a b c 满足条件
a b+1 c+a 满足条件
)
同时,b要不小于1。
代码如下:
#include<iostream>
#include<string>
using namespace std;
int main(){
int n;
cin>>n;
for(int i=0;i<n-1;i++){
string s;
cin>>s;
int c1=0;
int c2=0;
int c3=0;
int l=s.length();
int p1,p2;
p1=s.find("P");
p2=s.find("T");
int p=0;int t=0;
int f=0;
for(int j=0;j<l;j++){
if(s[j]!='A' && s[j]!='P' && s[j]!='T'){
cout<<"NO"<<endl;
f=1;
break;
}
if(s[j]=='P'){
p++;
}
if(s[j]=='T'){
t++;
}
if(t>1 || p>1){
cout<<"NO"<<endl;
f=1;
break;
}
}
for(int j=0;j<p1;j++){
if(s[j]=='A'){
c1++;
}
}
for(int j=p1+1;j<p2;j++){
if(s[j]=='A'){
c2++;
}
}
for(int j=p2+1;j<l;j++){
if(s[j]=='A'){
c3++;
}
}
if(c2<1 && f==0){
cout<<"NO"<<endl;
}
else if(c1*c2==c3 && f==0){
cout<<"YES"<<endl;
}
else if(c1*c2!=c3 && f==0){
cout<<"NO"<<endl;
}
}
string s;
cin>>s;
int f=0;
int c1=0;
int c2=0;
int c3=0;
int l=s.length();
int p1,p2;
p1=s.find("P");
p2=s.find("T");
int p=0;int t=0;
for(int j=0;j<l;j++){
if(s[j]!='A' && s[j]!='P' && s[j]!='T'){
cout<<"NO"<<endl;
f=1;
return 0;
}
if(s[j]=='P'){
p++;
}
if(s[j]=='T'){
t++;
}
if(t>1 || p>1){
cout<<"NO"<<endl;
f=1;
break;
}
}
for(int j=0;j<p1;j++){
if(s[j]=='A'){
c1++;
}
}
for(int j=p1+1;j<p2;j++){
if(s[j]=='A'){
c2++;
}
}
for(int j=p2+1;j<l;j++){
if(s[j]=='A'){
c3++;
}
}
if(c2<1 && f==0){
cout<<"NO"<<endl;
return 0;
}
else if(c1*c2==c3 && f==0){
cout<<"YES"<<endl;
return 0;
}
else if(c1*c2!=c3 && f==0){
cout<<"NO"<<endl;
return 0;
}
}