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

  1. 云栖社区>
  2. 博客>
  3. 正文

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

hjzgg 发布时间:2016-04-28 15:01:10 浏览508 评论0

摘要: /*   将给定的一个字符串分解成ABABA 或者 ABABCAB的形式! 思路:暴力枚举A, B, C串! */ #include<iostream> #include<cstring> #include<cstdio> #include<string> using...


/*
       将给定的一个字符串分解成ABABA 或者 ABABCAB的形式!
        思路:暴力枚举A, B, C串!
 */
#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>

using namespace std;
string str;
char ch[55];
int main(){
    int t;
    scanf("%d", &t);
    getchar();
    while(t--){
        char cc;
        int cnt=0;
        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=1; i<len/2; ++i){
            string A=str.substr(0, i);
            for(int j=1; j<len/2; ++j){
                if(i+j>len/2) break; 
                string B=str.substr(0+i, j);
                if(A==B) continue; 
                int ll=i;
                int k=i+j, x;
        
                for(x=0; x<ll && k<len; ++k, ++x)
                    if(A[x] != ch[k])
                       break;
                if(x==ll){
                    k=i+j+i;
                    ll=j;
                    for(x=0; x<ll && k<len; ++k, ++x)
                          if(B[x] != ch[k])
                           break;
                    if(x==ll){
                        
                        ll=i;
                        k=i+j+i+j;
                        for(x=0; 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-1;
                            for(x=ll-1; x>=0 && m>k; --m, --x)
                                if(B[x] != ch[m])
                                    break;
                            if(x==-1){
                                ll=i;
                                for(x=ll-1; x>=0 && m>k; --m, --x)
                                    if(A[x] != ch[m])
                                        break;
                                if(x==-1){
                                   string C=str.substr(k, m-k+1);
                                   if(A!=C && B!=C)    
                                      flag=true;
                                }
                            }  
                        }
                    }
                }
            }
        }
        if(flag) printf("Yes\n");
        else printf("No\n");
    } 
    return 0;
}

【云栖快讯】云栖专辑 | 阿里开发者们的第20个感悟:好的工程师为人写代码,而不仅是为编译器  详情请点击

网友评论