人生列车

follow on!success!

导航

第一次网络赛之许杰浩题解

Pretty Poem

Time Limit: 2 Seconds      Memory Limit: 65536 KB

Poetry is a form of literature that uses aesthetic and rhythmic qualities of language. There are many famous poets in the contemporary era. It is said that a few ACM-ICPC contestants can even write poetic code. Some poems has a strict rhyme scheme like "ABABA" or "ABABCAB". For example, "niconiconi" is composed of a rhyme scheme "ABABA" with A = "ni" and B = "co".

More technically, we call a poem pretty if it can be decomposed into one of the following rhyme scheme: "ABABA" or "ABABCAB". The symbol AB and C are different continuous non-empty substrings of the poem. By the way, punctuation characters should be ignored when considering the rhyme scheme.

You are given a line of poem, please determine whether it is pretty or not.

Input

There are multiple test cases. The first line of input contains an integer T indicating the number of test cases. For each test case:

There is a line of poem S (1 <= length(S) <= 50). S will only contains alphabet characters or punctuation characters.

Output

For each test case, output "Yes" if the poem is pretty, or "No" if not.

Sample Input

3
niconiconi~
pettan,pettan,tsurupettan
wafuwafu

Sample Output

Yes
Yes
No
  1 /*
  2 许杰浩的题解:
  3 AC代码:
  4 */
  5 #include <iostream>
  6 #include <cstdio>
  7 #include <string.h>
  8 #include <cstring>
  9 using namespace std;
 10 char str[55],s1[55];
 11 char s2[55],s3[55],s4[55];
 12 int cnt;
 13 void getap(){
 14     cnt=1;
 15     int l=strlen(str);
 16     for(int i=0;i<l;i++){
 17         if(str[i]<='z'&&str[i]>='a'){
 18             s1[cnt++]=str[i];
 19         }
 20         else if(str[i]<='Z'&&str[i]>='A'){
 21             s1[cnt++]=str[i];
 22         }
 23     }
 24 }
 25 void getstr(int i,int j,char *s){
 26     int p=0;
 27     for(int k=0;k<55;k++)s[k]='\0';
 28     for(int k=i;k<=j;k++){
 29         s[p++]=s1[k];
 30     }
 31 }
 32 void print(int l,int k){
 33     for(int i=l;i<=k;i++){
 34         printf("%c",s1[i]);
 35     }
 36     cout<<endl;
 37 }
 38 bool solve1(){
 39     int len=cnt-1;
 40     if(len<5)return false;
 41     for(int i=1;i<=len;i++){
 42         if(s1[i]!=s1[len])continue;
 43         if(len-i*3<2)break;
 44         if((len-i*3)%2==1)continue;
 45         int l=(len-i*3)/2;
 46         bool flag=1;
 47         for(int j=1;j<=i;j++){
 48             if(s1[j]!=s1[j+l+i]){flag=0;break;}                        //ababa    1a 2a
 49             if(s1[j]!=s1[len-i+j]){flag=0;break;}                    //ababa    1a 3a
 50         }
 51         //print(1,i);
 52         //print(i+1,i+l);
 53         if(!flag)continue;
 54         if(l==i){                                                    //ababa    a b
 55             bool ok1=0;
 56             for(int j=1;j<=i;j++){
 57                 if(s1[j]!=s1[j+i]){ok1=1;break;}
 58             }
 59             if(!ok1)flag=0;
 60         }
 61         if(!flag)continue;
 62         for(int j=1;j<=l;j++){                                        //ababa        1b 2b
 63             if(s1[j+i]!=s1[j+i*2+l]){flag=0;break;}
 64         }
 65         if(flag)return true;
 66     }
 67     return false;
 68 }
 69 bool solve2(){
 70     int len=cnt-1;
 71     if(len<7)return false;
 72     for(int i=2;i<=len;i++){
 73         if(s1[i]!=s1[len])continue;
 74         if(len-i*3<1)break;
 75         bool flag=1;
 76         //print(1,i);
 77         for(int j=1;j<=i;j++){                                                //ababcab
 78             if(s1[j]!=s1[len-i+j]){flag=0;break;}                            //ababcab  1ab 3ab
 79             if(s1[j]!=s1[i+j]){flag=0;break;}                                //ababcab  1ab 2ab
 80         }
 81         if(!flag)continue;
 82         getstr(2*i+1,len-i,s4);
 83         //print(2*i+1,len-i);
 84         for(int j=1;j<i;j++){
 85             getstr(1,j,s2);
 86             getstr(j+1,i,s3);
 87             if(strcmp(s2,s3)!=0&&strcmp(s4,s2)!=0&&strcmp(s3,s4)!=0){        //a!=b c!=a b!=c
 88                 //print(1,j);print(j+1,i);
 89                 return true;
 90             }
 91         }
 92     }
 93     return false;
 94 }
 95 
 96 int main(){
 97     int t;
 98     scanf("%d",&t);
 99     while(t--){
100         scanf("%s",str);
101         getap();
102         if(solve1()||solve2())printf("Yes\n");
103         else printf("No\n");
104     }
105 }
View Code

 

posted on 2014-09-07 17:03  tianxia2s  阅读(321)  评论(3编辑  收藏  举报