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

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 }

时间: 2024-10-13 17:32:53

第一次网络赛之许杰浩题解的相关文章

hdu 6444 网络赛 Neko&#39;s loop(单调队列 + 裴蜀定理)题解

题意:有编号为0~n-1的n个游戏,每个活动都有一个价值(可为负),给你m,s和k,你可以从任意一个编号开始玩,但是下一个游戏必须是编号为(i + k)%n的游戏,你最多能玩m次游戏,问你如果最后你手里要有s的价值,那么你至少一开始要有多少价值. 思路:由裴蜀定理可以知道,如果有n个值首尾相连,间隔为k地走,那么最后会有一个循环节,这样的循环节一共有gcd(n, k)个,每个循环节长度n / gcd(n, k)个.所以我们只要找出所有循环节,并且把每个循环节的最大价值算出来就行了.对于每个循环节

20180909徐州网络赛题解

目录 20180909徐州网络赛题解 A. Hard to prepare MEANING SOLUTION CODE B. BE, GE or NE MEANING SOLUTION CODE F. Features Track CODE G. Trace MENING SOLUTION CODE H. Ryuji doesn't want to study MEANING CODE I. Characters with Hash CODE J. Maze Designer MEANING S

hdu6153 A Secret CCPC网络赛 51nod 1277 KMP

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6153 题意: 给出两个字符串S1,S2,求S2的所有后缀在S1中出现的次数与其长度的乘积之和. 思路: CCPC网络赛题解: https://post.icpc-camp.org/d/714-ccpc-2017 http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1277   是一样的 将s1,s2翻转,转化为求前缀在s1中出

2015长春、沈阳网络赛总结

我所说的总结并不是谈什么题目解法之类的东西 这些东西网上有很多题解 说说这两场网赛吧! 这两场我的状态还行,只是xiaodong还没有找到状态,长春赛lucas+中国剩余定理他硬是打了一整场,还是没打出来,版题没打出来确实不该 wzb状态一般,不过看题的能力依然那么厉害 长春赛中,很遗憾的只出了5道题,按当时过题数目,应该是7道德,可是小东的lucas那题没打出来,而我打得后缀数组那题,当顺时针的时候不用看是否是下标最前面的,但是反过来就需要看了,当时想当然的认为不用,交了4发,一直wa到比赛结

HDU 5008西安网络赛B题:后缀数组求第k小子串

思路:尼玛,这题搞了一天了,比赛的时候用了n^2的方法绝对T了,然后今天看别人代码看了一天才知道.后面感觉也挺容易的,就是没想到,之前做过SPOJ 694 705求过不同子串了,知道怎么求不同子串个数了,但是比赛的时候这个技巧竟然抛在脑后了,然后就不会了. 但是今天自己用了自己的两个后缀数组的模板(倍增和DC3)的都WA了,搞得自己真想跳楼去了!! 到现在都不知道到底是哪里错了,处理的方法和标准做法都一样,但是就是WA,然后用了别人的模板,再用自己的处理方法就过了,怀疑自己的两个模板是不是哪里错

HDU 5875 Function -2016 ICPC 大连赛区网络赛

题目链接 网络赛的水实在太深,这场居然没出线zzz,差了一点点,看到这道题的的时候就剩半个小时了.上面是官方的题意题解,打完了才知道暴力就可以过,暴力我们当时是想出来了的,如果稍稍再优化一下估计就过了zzz.去年有一场现场赛也是n=1000,n^3过了,看来关键时刻实在做不出来就得大胆暴力啊. #include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1e5+5; int a[maxn]

个人心情:又是一年网络赛

前天在群里看到,网络赛快开始了,第一次觉得假期好曼城,是不是因为在工作的原因啊,有种度日如年的感觉哈哈.话说真相拿出时间来好好学习一下. 上一张ACM网络赛时间表 赛区(官方网站) 邀请赛 网络赛 现场赛 备注 牡丹江赛区牡丹江师范学院   9.7 12:00~17:00 在HDOJ举行浙江大学命题 10.11~12浙江大学命题   鞍山赛区辽宁科技大学   9.13 12:00~17:00 在HDOJ举行清华大学命题 10.18~19清华大学命题   西安赛区西北工业大学 陕西邀请赛 报名截止

HDOJ 5012 Dice--2014网络赛西安赛区F题

题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=5012 Dice Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 307    Accepted Submission(s): 183 Problem Description There are 2 special dices on the

2016 CCPC 网络赛 B 高斯消元 C 树形dp(待补) G 状压dp+容斥(待补) H 计算几何

2016 CCPC 网络赛 A - A water problem 水题,但读题有个坑,输入数字长度很大.. B - Zhu and 772002 题意:给出n个数(给出的每个数的质因子最大不超过2000),选出多个数相乘得b.问有多少种选法让b 为完全平方数. tags:高斯消元,求异或方程组解的个数.   好题 每个数先素数分解开.  对于2000以内的每个素数p[i],这n个数有奇数个p[i]则系数为1,偶数个则系数为0,最后n个数的p[i]系数异或和都要为0才会使得最后的积为完全平方数.