ZOJ 3818--Pretty Poem(暴力)
1532 ワード
句読点を無視した場合、ABABAやABABCABのような形をした文字列を優美な文字列と呼ぶ.美しいかどうかを判断する文字列を与えます.
分析:暴力はAとBの長さを列挙して、先にABABA型かどうかを判断して、それから総長さで3倍のABの長さを減らして、Cの長さを得て、それから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;
}