PAT-乙級-1003(C++)

來源:互聯網
上載者:User

標籤:bool   完全   輸出   長度   div   pac   logs   code   遞推   

1003. 我要通過!(20)時間限制400 ms記憶體限制65536 kB代碼長度限制8000 B判題程式Standard作者CHEN, Yue

答案正確”是自動判題系統給出的最令人歡喜的回複。本題屬於PAT的“答案正確”大派送 —— 只要讀入的字串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”。

得到“答案正確”的條件是:

1. 字串中必須僅有P, A, T這三種字元,不可以包含其它字元;
2. 任意形如 xPATx 的字串都可以獲得“答案正確”,其中 x 或者是Null 字元串,或者是僅由字母 A 組成的字串;
3. 如果 aPbTc 是正確的,那麼 aPbATca 也是正確的,其中 a, b, c 均或者是Null 字元串,或者是僅由字母 A 組成的字串。

現在就請你為PAT寫一個自動裁判程式,判定哪些字串是可以獲得“ 答案正確”的。

 

輸入格式: 每個測試輸入包含1個測試案例。第1行給出一個自然數n (<10),是需要檢測的字串個數。接下來每個字串佔一行,字串長度不超過100,且不包含空格。

輸出格式:每個字串的檢測結果佔一行,如果該字串可以獲得“答案正確”,則輸出YES,否則輸出NO。

輸入範例:
8PATPAATAAPATAAAAPAATAAAAxPATxPTWhateverAPAAATAA
輸出範例:
YESYESYESYESNONONONO

 題目分析:

1.字串中必須僅有P, A, T這三種字元,不可以包含其它字元;

2.任意形如 xPATx 的字串都可以獲得“答案正確”,其中 x 或者是Null 字元串,或者是僅由字母 A 組成的字串;

  這裡要注意Null 字元串不是空格!!!即正確形式為PAT、APATA、AAPATAA等。P之前的A個數與T之後的A個數相等。

3. 如果 aPbTc 是正確的,那麼 aPbATca 也是正確的,其中 a, b, c 均或者是Null 字元串,或者是僅由字母 A 組成的字串。

  這個要求是相對而言比較有難度的,需要仔細分析,一開始拿到可能完全不理解題意。aPbATca正確的前提是aPbTc正確,那麼如何保證aPbTc正確呢?

  根據之前的條件可知,能判斷正確的必然只有條件二。即第一次遞推時,aPbTc滿足條件二,b==‘A‘,a==c;

    遞推關係:

        

 

 

  以此類推我們可以總結出一個關係,T後面A的個數等於P前A的個數乘以P和T之間的A的個數。

  這道題不難但是條件三挺繞的emmm,我是用字串寫的調用的str.length(),網上大部分都是直接用的int去數的,本質是差不多的~

  起初是看到三個功能所以寫了三個函數,後來發現函數一是不必要的就注釋掉了~

 1 #include<iostream> 2 #include<string> 3 using namespace std; 4 bool fun1(string m); 5 bool fun2(string m); 6 bool fun3(string m); 7 int main() 8 { 9     int num;10     cin >> num;11     string a[10];12     for (int i = 0; i < num; i++)13         cin >> a[i];14     for (int i = 0; i < num; i++)15     {16         //bool first = fun1(a[i]);17         bool second = fun2(a[i]);18         bool third = fun3(a[i]);19         if ((/*first&&*/second) || (/*first&&*/third))20             cout << "YES" << endl;21         else22             cout << "NO" << endl;23     }    24 }25 bool fun1(string m)26 {27     int n = m.length();28     for (int j = 0; j < n; j++)29     {30         if (m[j] != ‘P‘ && m[j] != ‘A‘ && m[j] != ‘T‘)31             return false;32     }33     return true;34 }35 bool fun2(string m)36 {37     int j = 0;38     string str1, str2, str3;39     for (; m[j] == ‘A‘; j++)40     {41         str1 += m[j];42     }43     if (m[j] != ‘P‘ || m[j + 1] != ‘A‘ || m[j + 2] != ‘T‘)44         return false;45     j += 3;46     for (; m[j] == ‘A‘; j++)47     {48         str2 += m[j];49     }50     if (j != m.length())51         return false;52     if (str1 != str2)53         return false;54     return true;55 }56 bool fun3(string m)57 {58     int j = 0;59     string str1, str2, str3;60     for (; m[j] == ‘A‘; j++)61     {62         str1 += m[j];63     }64     if (m[j] != ‘P‘)65         return false;66     j += 1;67     for (; m[j] == ‘A‘; j++)68     {69         str2 += m[j];70     }71     if (str2 == "")72         return false;73     if (m[j] != ‘T‘)74         return false;75     j += 1;76     for (; m[j] == ‘A‘; j++)77     {78         str3 += m[j];79     }80     if (j != m.length())81         return false;82     if (str3.length()!=(str1.length()*str2.length()))83         return false;84     return true;85 }

 

 

 

 

PAT-乙級-1003(C++)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.