PAT [B]私は合格したいです!

件名の説明:

正しい答えは、」ほとんどの喜び自動返信文話題与えられたシステムです。このタイトルは「のPATに属して正しい答え」ビッグ配信-ちょうど条件以下の文字列を読んで満たされ、システムが出力されますが、「正しい答え」、それ以外の場合は「出力間違った答えを。」

「ゲット正解」の条件は以下のとおりです。

文字列は、P、A、T 3つの文字、その他の文字を含むことができない必要があります。
そのような文字列として任意の形状をxPATx「正解」を取得、またはxは空の文字列であるか、または唯一の文字によってすることができます文字列は、その;
aPbTcが正しい場合、次にaPbATcaは、式中、a、b、cまたは全て空の文字列、または文字だけからなる文字列正しいです。
今、自動的に「得ることができた文字列を決定するPATの審判プログラムを書くように頼む正解です」。

入力フォーマット:

各テストは、テスト入力を含みます。ライン1は正の整数N(<10)で与えられ、検出すべき文字列の数です。次に、各列に対して1つの行ではなく、100以上の文字列の長さ、スペースなし。

出力フォーマット:

各文字列の検出結果の行、列は「正しい答え」、出力YES、それ以外の場合は出力NOを得ることができます。

サンプル入力:

8
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
APAAATAA

出力例:

YES
YES
YES
YES
NO
NO
NO
NO

問題解決のアイデア:

条件:

  1. 文字列は3文字の唯一のP、A、Tを持っている必要があり、文字は、他のを含めることはできません。
  2. 任意の形状の文字列がxPATx「正解」を得ることができ、あるいはxは空の文字列、または文字Aでのみからなる文字列です。
  3. aPbTcが正しい場合、次にaPbATcaは、正確であり、B、C又は全て空の文字列、または文字のみのA.で構成される文字列

最初の条件:あなたが他の文字を持つことができない、裁判官へのより良いです

第二の条件:xPATx:説明P、Tおよび一方のみ、AおよびT Aの前のPは、後者に等しいです。

第三の条件:aPbTcが正しい場合、AはA、P及びTの中間であるBを添加し、aPbATca我々は、PおよびTを押し下げ、その後、中間体Aを追加していき、その後aPbAATcaa、A Tの数が背面に等しいです。 Pの数は、PとTとの間のフロントの数を乗じ、第2の条件が満たされます。

コード:

#include<iostream>
#include<string>
using namespace std;
int main() {
    string s;
    int n;
    int i,a,b,c;
    cin>>n;
    while (n--) {
        cin>>s;
        i=a=b=c=0;
        if(s=="PAT") {
            cout<<"YES"<<endl;
            continue;
        }
        while(s[i]=='A') {
        	i++;
        	a++;
		}
		if(s[i]=='P') {
			i++;
			while(s[i]=='A') {
				i++;
				b++;
			}
			if(s[i]=='T') {
				i++;
				while(s[i]=='A') {
					i++;
					c++;
				}
				if(c==a*b&&b>0) {
					cout<<"YES"<<endl;
		            continue;
				}
			}	
		}
		cout<<"NO"<<endl;
    }
    return 0;
}
公開された55元の記事 ウォン称賛30 ビュー9811

おすすめ

転載: blog.csdn.net/chaifang0620/article/details/104873203