1003 我要通过!
这道题是一道找规律的题目。第一次做时,看了半天题意看不懂。

第3个条件是第2个条件的一种延申。
对于条件2,AAPATAA“答案正确”,再看条件3,AAPAATAAAA必然“答案正确”
对于条件2,AAPAATAAAA“答案正确”,再看条件3,AAPAAATAAAAAA必然答案正确。
... ...
可以推断出,P左边的A的个数,乘以P与T之间A的个数,等于T右边的A的个数。
注意:空字符串可理解为 空气。
#include"iostream"
using namespace std;
int main() {
int n;
cin>>n;
string str;
while(n--) {
cin>>str;
bool flag = true;
int posP = -1,posT = -1;
for(int i = 0; i < str.length(); ++i) {
if(str[i] == 'P' && posP == -1) {//是P字符并且是第一次出现,则记录下标
posP = i;
} else if(str[i] == 'T' && posT == -1) {//是T字符并且是第一次出现,则记录下标
posT = i;
} else if(str[i] == 'A') { //是A字符则跳过
continue;
} else { //如果出现多个P,或者多个T,或者非P,A,T字符,则结束判断
flag = false;
break;
}
}
//P或者T不存在,或者P在T的后面,或者PT之间没有A
if(flag == false ||posP == -1 || posT == -1 ||posP > posT || posT-posP == 1)
printf("NO\n");
else {
int x = posP;//表示字符P左边共有x个字符A
int y = posT-posP - 1;//表示字符P与T之间共有y个字符A
int z = str.length() - posT - 1;//表示字符T右边共有z个字符A
if(x*y == str.length() - posT - 1)
printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}

浙公网安备 33010602011771号