ZOJ3818 水题一个。 直接暴力搞。 就是需要注意A,B,C要是不同的。
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 A, B 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
Author: JIANG, Kai Source: The 2014 ACM-ICPC Asia Mudanjiang Regional First Round
/* ***
Author :kuangbin
Created Time :2014/10/5 9:10:11
File Name :ZOJ3818.cpp
************************************************ */
#include <stdio.h>
#include <string.h>
#include
#include
#include
#include
#include
#include
#include
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
bool check1(string str,string A,string B){
if(A == B)return false;
string tmp = A + B + A + B + A;
return str == tmp;
}
bool check2(string str,string A,string B){
if(A == B)return false;
int len = str.length();
int al = A.length();
int bl = B.length();
if(len <= 3*(al+bl))return false;
string tmp = string(str.begin(),str.begin()+al+bl);
if(tmp != (A+B))return false;
tmp = string(str.begin()+al+bl,str.begin()+al+bl+al+bl);
if(tmp != (A+B))return false;
tmp = string(str.begin()+al+bl+al+bl,str.end()-al-bl);
if(tmp == A || tmp == B)return false;
tmp = string(str.end()-al-bl,str.end());
if(tmp != (A+B))return false;
return true;
}
bool check(string str){
int len = str.length();
for(int i = 1;i <= len;i++)
for(int j = 1;j+i <= len;j++)
if(check1(str,string(str.begin(),str.begin()+i),string(str.begin()+i,str.begin()+i+j))
|| check2(str,string(str.begin(),str.begin()+i),string(str.begin()+i,str.begin()+i+j)) )
return true;
return false;
}
char ss[100];
int main()
{
//freopen(“in.txt”,”r”,stdin);
//freopen(“out.txt”,”w”,stdout);
string str;
int T;
scanf(“%d”,&T);
while(T–){
scanf(“%s”,ss);
int len = strlen(ss);
str = “”;
for(int i = 0;i < len;i++)
if( (ss[i] >= ‘a’ && ss[i] <= ‘z’)
|| (ss[i] >= ‘A’ && ss[i] <= ‘Z’))
str += ss[i];
if(check(str))printf(“Yes\n”);
else printf(“No\n”);
}
return 0;
}