当前位置: 首页 > 图灵资讯 > 技术篇> 1003 我要通过!(通俗易懂版)

1003 我要通过!(通俗易懂版)

来源:图灵教育
时间:2023-06-27 15:05:32

题目

解法:记P前A的数量为ans1,T后A的数量为ans2,PT之间A的数量为ans3

由任意形如 xPATx 所有字符串都可以得到“正确答案”。可以看出,P之前的A数量至少等于T之后的数量;如果 aPbTc 是的,所以 aPbATca 也是正确的(递归)。P和T之间有多少b,T后面有多少c。另外,最简单的正确项是apata,所以初始PT两侧的a尺寸是一样的,所以有ans2=ans3*ans1是正确项。

#include<iostream>#include<string>using namespace std;bool f(string a) {int ans1=0,ans2=0,ans3=0;int flag=0;for(int i=0; i<a.size(); ++i) {if(flag==1) {//PT中间A数量ifif数量(a[i]!='A'&&a[i]!='A'&&a[i]!='T')return false;else if(a[i]=='T') {if(ans3)flag+=1;else return false;} else ans3++;} else if(!flag) {///P之前的A数if(a[i]=='P')flag+=1;else if(a[i]!='A')return false;else ans1++;} else {///T后的数量if(a[i]!='A')return false;else ans2++;}}if(ans2!=ans1*ans3|.size()<3)return false ;return true;}int main () {int n;cin>>n;for(int i=0; i<n; ++i) {string a;cin>>a;if(f(a))cout<<"YES\n";else cout<<"NO\n";}return 0;}