PAT乙級1003我要通過!
阿新 • • 發佈:2018-12-20
題目描述: “答案正確”是自動判題系統給出的最令人歡喜的回覆。本題屬於 PAT 的“答案正確”大派送 —— 只要讀入的字串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”。
得到“答案正確”的條件是:
字串中必須僅有 P、 A、 T這三種字元,不可以包含其它字元; 任意形如 xPATx 的字串都可以獲得“答案正確”,其中 x 或者是空字串,或者是僅由字母 A 組成的字串; 如果 aPbTc 是正確的,那麼 aPbATca 也是正確的,其中 a、 b、 c 均或者是空字串,或者是僅由字母 A 組成的字串。 現在就請你為 PAT 寫一個自動裁判程式,判定哪些字串是可以獲得“答案正確”的。
輸入格式: 每個測試輸入包含 1 個測試用例。第 1 行給出一個正整數 n (<10),是需要檢測的字串個數。接下來每個字串佔一行,字串長度不超過 100,且不包含空格。
輸出格式: 每個字串的檢測結果佔一行,如果該字串可以獲得“答案正確”,則輸出 YES,否則輸出 NO。
輸入樣例: 8 PAT PAAT AAPATAA AAPAATAAAA xPATx PT Whatever APAAATAA
輸出樣例: YES YES YES YES NO NO NO NO 程式碼如下:
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n,flaga,flagb,flagc,flag;
string s;
cin>>n;
while(n--)
{
flag=0;flaga=-1;flagb=-1;flagc=-1;
cin>>s;
for(int i=0;i<s.length();i++)
{
if(s[i]=='P')
flaga=i;
if(s[i]=='T')
{
flagb=i-flaga-1;
flagc=s.length()-i-1;
}
}
for(int i=0;i<s.length()&&!flag;i++)
{
if(s[i]!='P')
{
if(s[i]!='A')
{
if(s[i]!='T')
{
flag=1;
}
}
}
}
if(flaga==0&&flagc==0&&flagb!=0)
{
cout<<"YES"<<endl;
}
if(flaga>0&&flagb!=0&&flagc!=0)
{
if(((flagc/flagb)==flaga)&&!flag)
cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
if(flaga<0||flagb<0||flagc<0)
cout<<"NO"<<endl;
if(flagb==0)
cout<<"NO"<<endl;
}
return 0;
}
來總結一下: 1)剛開始看的也不是很懂,就一個一個寫,找規律,滿足開頭的A的個數 * 中間的A的個數 = 結尾的A的個數。