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

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

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

hjzgg 2016-04-28 15:01:10 浏览333 评论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;
}

用云栖社区APP,舒服~

【云栖快讯】青年们,一起向代码致敬,来寻找第83行吧,云栖社区邀请大神彭蕾、多隆、毕玄、福贝、点评Review你的代码,参与互动者将选取50位精彩回复赠送“向代码致敬”定制T恤1件,最终成为“多隆奖”的小伙伴还将获得由阿里巴巴提供的“多隆奖”荣誉证书和奖杯。  详情请点击

网友评论

hjzgg
文章323篇 | 关注11
关注
帮助您基于阿里云构建出一个隔离的网络环境。您可以完全掌控自己的虚拟网络,如选择自有 IP 地... 查看详情
高速通道(ExpressConnect)是一款便捷高效的网络服务,用于在云上的不同网络环境间... 查看详情
阿里云针对移动应用推出的无线加速产品,旨在依托阿里云遍布全网的加速节点,海量带宽网络等优越的... 查看详情
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效... 查看详情
520表白

520表白