ZOJ 3818 Pretty Poem


Pretty Poem
Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu
Submit  Status  Practice  ZOJ 3818

Description

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


题目大意:给出一个非空的长度不超过50的字符串(字符是字母或者标点符号),将标点符号省略后判断它是不是pretty串。满足pretty串的条件如下:如果一个串可以写成ABABA或者ABABCAB的形式,且A、B、C两两不相等并且非空,那么这个串就是pretty串。


解题思路:因为长度不超过50,所以可以直接枚举A、B的长度,然后暴力求解。


代码如下:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define debug "output for debug\n"
#define pi (acos(-1.0))
#define eps (1e-6)
#define inf (1<<28)
#define sqr(x) (x) * (x)
#define mod 1000000007
using namespace std;
typedef long long ll;
typedef unsigned long long ULL;
bool solve1(string s)
{
    int i,j;
    string sa,sb,sc,sd,se;
    for(i=1; 3*i<=s.size(); i++)
    {
        for(j=1; i+j+i+j+i<=s.size(); j++)
        {
            if((i+j+i+j+i)!=s.size())
                continue;
            sa.clear();sb.clear();sc.clear();sd.clear();se.clear();
            sa.assign(s,0,i);//A
            sb.assign(s,i,j);//B
            sc.assign(s,i+j,i);//A
            sd.assign(s,i+j+i,j);//B
            se.assign(s,i+j+i+j,i);//A
            //cout<>s1;
        for(i=0; i='a'&&s1[i]<='z')||(s1[i]>='A'&&s1[i]<='Z'))
                s+=s1[i];
        }
        if(solve1(s)||solve2(s))
            printf("Yes\n");
        else
            printf("No\n");
        //cout<





你可能感兴趣的:(zoj)