PAT (Basic Level) Practice (中文)1003 我要通过! (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
Ideas
其它的很好理解,aPbTc正確,aPbATca也正確。翻譯一下,就是P和T中間每增加一個A,需要將P之前的內容復制到字符串末尾,得到的新字符串就也是正確的。
總結就是:
- 只存在’P’, ‘A’, 'T’三種字符;
- ‘P’, 'T’只能出現一次并且按照該順序先后出現;
- P&T之間不能沒有A;
- T之后A的數量 = P之前A的數量 × P&T中間A的數量。
Code
C++實現
#include <iostream> #include <cstring> #include <string> using namespace std;bool check(string basicString){bool temp=false;for (int i = 0; i < basicString.length(); ++i) {//字符串中必須僅有 P、 A、 T這三種字符,不可以包含其它字符;if(basicString[i]!='P'&&basicString[i]!='A'&&basicString[i]!='T')return false;//任意形如 xPATx 的字符串都可以獲得“答案正確”,// 其中 x 或者是空字符串,或者是僅由字母 A 組成的字符串;if(basicString[i]=='P'&&basicString[i+1]=='A'&&basicString[i+2]=='T'){int len1=0,len2=0;for (int j = i-1; j >= 0; --j) {if(basicString[j]=='A') len1++;else return false;}for (int k = i+3; k < basicString.length(); ++k) {if(basicString[k]=='A') len2++;else return false;}if(len1==len2) return true;}//如果 aPbTc 是正確的,那么 aPbATca 也是正確的,// 其中 a、 b、 c 均或者是空字符串,或者是僅由字母 A 組成的字符串。if(basicString[i]=='P'){if(basicString[i+1]=='T') return false;bool ans=false;int lena=0,lenb=0,lenc=0;for (int j = basicString.length()-1; j > i; --j) {if(basicString[j]=='T'){ans=true;for (int k = i+1; k < j; ++k) {if (basicString[k]!='A') return false;lenb++;}for (int l = 0; l < i; ++l) {if (basicString[l]!='A') return false;lena++;}for (int m = j+1; m < basicString.length(); ++m) {if (basicString[m]!='A') return false;lenc++;}break;}}if (ans&&(lenc==lena*lenb)) return true;}} }int main() {int n;cin>>n;string s[10];bool temp[10];memset(temp,0, sizeof(temp));for (int i = 0; i < n; ++i) {cin>>s[i];if(check(s[i])) temp[i]= true;}for (int j = 0; j < n; ++j) {if(temp[j]) cout<<"YES"<<endl;else cout<<"NO"<<endl;}return 0; }python實現
正則表達式是對字符串的一種邏輯公式,就是實現定義好一些特定的字符,及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯。通常用來檢索,替換那些符合摸個模式的文本,常用于字符串操作。
總結
以上是生活随笔為你收集整理的PAT (Basic Level) Practice (中文)1003 我要通过! (20 分)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PAT (Basic Level) Pr
- 下一篇: 《机器学习》 —— 第二章:模型评估与选