首页 > 代码库 > 2014网选ZOJPretty Poem(暴力枚举)

2014网选ZOJPretty Poem(暴力枚举)

 /*
  将给定的一个字符串分解成ABABA 或者 ABABCAB的形式!
思路:暴力枚举A, B, C串!
*/
1
#include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<string> 5 6 using namespace std; 7 string str; 8 char ch[55]; 9 int main(){10 int t;11 scanf("%d", &t);12 getchar();13 while(t--){14 char cc;15 int cnt=0;16 scanf("%c", &cc);17 18 while(cc!=\n){19 if((cc>=A && cc<=Z || cc>=a && cc<=z))20 ch[cnt++]=cc;21 scanf("%c", &cc);22 } 23 ch[cnt]=\0;24 str=string(ch);25 int len=strlen(ch);26 bool flag=false;27 for(int i=1; i<len/2; ++i){28 string A=str.substr(0, i);29 for(int j=1; j<len/2; ++j){30 if(i+j>len/2) break; 31 string B=str.substr(0+i, j);32 if(A==B) continue; 33 int ll=i;34 int k=i+j, x;35 36 for(x=0; x<ll && k<len; ++k, ++x)37 if(A[x] != ch[k])38 break;39 if(x==ll){40 k=i+j+i;41 ll=j;42 for(x=0; x<ll && k<len; ++k, ++x)43 if(B[x] != ch[k])44 break;45 if(x==ll){46 47 ll=i;48 k=i+j+i+j;49 for(x=0; x<ll && k<len; ++k, ++x)50 if(A[x] != ch[k])51 break;52 if(x==ll && k==len)53 flag=true;54 if(!flag){55 k=i+j+i+j;56 ll=j;57 int m=len-1;58 for(x=ll-1; x>=0 && m>k; --m, --x)59 if(B[x] != ch[m])60 break;61 if(x==-1){62 ll=i;63 for(x=ll-1; x>=0 && m>k; --m, --x)64 if(A[x] != ch[m])65 break;66 if(x==-1){67 string C=str.substr(k, m-k+1);68 if(A!=C && B!=C) 69 flag=true;70 }71 } 72 }73 }74 }75 }76 }77 if(flag) printf("Yes\n");78 else printf("No\n");79 } 80 return 0;81 }

 

2014网选ZOJPretty Poem(暴力枚举)