ZOJ 3818--Pretty Poem(暴力)

1532 ワード

句読点を無視した場合、ABABAやABABCABのような形をした文字列を優美な文字列と呼ぶ.美しいかどうかを判断する文字列を与えます.
分析:暴力はAとBの長さを列挙して、先にABABA型かどうかを判断して、それから総長さで3倍のABの長さを減らして、Cの長さを得て、それからABABCAB型に合うかどうかを判断します.
コード:
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;

char s[100];

int main() {
    int T;
    scanf("%d", &T);
    while(T--) {
        scanf("%s", s);
        int len = strlen(s);
        string str;
        for(int i = 0; i < len; i++)
            if(isupper(s[i]) || islower(s[i]))
                str += s[i];
        len = str.length();
        int flag = 0;
        for(int i = 1; i < len/2 && !flag; i++) {
            for(int j = 1; j < len/2 && !flag; j++) {
                string A = str.substr(0, i);
                string B = str.substr(i, j);
                if(A == B) continue;
                if(A+B+A+B+A == str) {
                    flag = 1;
                    break;
                }
                if(len > 3*(i+j)) {
                    string AB = A+B;
                    string C = str.substr(2*(i+j), len-3*(i+j));
                    if(A == C || B == C) continue;
                    if(AB+AB+C+AB == str) {
                        flag = 1;
                        break;
                    }
                }
            }
        }
        if(flag) printf("Yes
"); else printf("No
"); } return 0; }