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


    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]='';
     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
    ");
    103         else printf("No
    ");
    104     }
    105 }
    View Code
    我要坚持一年,一年后的成功才是我想要的。
  • 相关阅读:
    svn鉴权方法
    我收藏的技术网站
    linux下apache+svn的安装
    svn安装失败解决方法
    编译器扩展deprecated
    svn静态库依赖关系
    Linux用户和组
    boost之简介、编译、安装和使用
    svn数据库认证方法
    svn版本库目录结构
  • 原文地址:https://www.cnblogs.com/tianxia2s/p/3960554.html
Copyright © 2020-2023  润新知