2014牡丹江网络赛ZOJPretty Poem(暴力枚举)

时间:2021-10-28 16:44:40
 /*
  将给定的一个字符串分解成ABABA 或者 ABABCAB的形式!
思路:暴力枚举A, B, C串!
*/
1 #include<iostream>
#include<cstring>
#include<cstdio>
#include<string> using namespace std;
string str;
char ch[];
int main(){
int t;
scanf("%d", &t);
getchar();
while(t--){
char cc;
int cnt=;
scanf("%c", &cc); while(cc!='\n'){
if((cc>='A' && cc<='Z' || cc>='a' && cc<='z'))
ch[cnt++]=cc;
scanf("%c", &cc);
}
ch[cnt]='\0';
str=string(ch);
int len=strlen(ch);
bool flag=false;
for(int i=; i<len/; ++i){
string A=str.substr(, i);
for(int j=; j<len/; ++j){
if(i+j>len/) break;
string B=str.substr(+i, j);
if(A==B) continue;
int ll=i;
int k=i+j, x; for(x=; x<ll && k<len; ++k, ++x)
if(A[x] != ch[k])
break;
if(x==ll){
k=i+j+i;
ll=j;
for(x=; x<ll && k<len; ++k, ++x)
if(B[x] != ch[k])
break;
if(x==ll){ ll=i;
k=i+j+i+j;
for(x=; x<ll && k<len; ++k, ++x)
if(A[x] != ch[k])
break;
if(x==ll && k==len)
flag=true;
if(!flag){
k=i+j+i+j;
ll=j;
int m=len-;
for(x=ll-; x>= && m>k; --m, --x)
if(B[x] != ch[m])
break;
if(x==-){
ll=i;
for(x=ll-; x>= && m>k; --m, --x)
if(A[x] != ch[m])
break;
if(x==-){
string C=str.substr(k, m-k+);
if(A!=C && B!=C)
flag=true;
}
}
}
}
}
}
}
if(flag) printf("Yes\n");
else printf("No\n");
}
return ;
}