码迷,mamicode.com
首页 > 其他好文 > 详细

ZOJ 3818 Pretty Poem (暴力模拟 string(substr))

时间:2015-03-01 18:31:25      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:zoj   暴力模拟   string substr   


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


题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5350


题目大意:问除去非字母字符后剩下的字符串是不是满足ABABA或者ABABCAB的结构,其中ABC分别是不同的子串


题目分析:先得到目标字符串,然后分别枚举子串A和B,这里用到stl string里的substr函数( sub = s.substr(startpos, len) ),枚举时枚举到len / 2即可,因为AB显然可能超多len/2,剩下的就是纯粹模拟,关键是substr大法好~


#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
char get[55];

int main() 
{
    int T;
    scanf("%d", &T);
    while(T--) 
    {
        scanf("%s", get); 
        string s;
        bool flag = false;
        int len = strlen(get);
        for(int i = 0; i < len; i++)
            if((get[i] >= 'A' && get[i] <= 'Z') || (get[i] >= 'a' && get[i] <= 'z'))
                s += get[i];
        len = s.length();
        for(int i = 1; i < len / 2; i++) 
        {
            for(int j = 1; j < len / 2; j++) 
            {
                string A = s.substr(0, i); 
                string B = s.substr(i, j); 
                if(A == B) 
                    continue;
                if(A + B + A + B + A == s) 
                {
                    flag = true;
                    break;
                }
                if((i + j) * 3 < len) 
                {
                    string AB = A + B; 
                    string C = s.substr((i + j) * 2, len - (i + j) * 3); 
                    if(A == C || B == C)
                        continue;
                    if(AB + AB + C + AB == s) 
                    {
                        flag = true; 
                        break; 
                    }
                } 
            } 
            if(flag)
                break;
        } 
        printf("%s\n", flag ? "Yes" : "No");
    }
}




ZOJ 3818 Pretty Poem (暴力模拟 string(substr))

标签:zoj   暴力模拟   string substr   

原文地址:http://blog.csdn.net/tc_to_top/article/details/44003843

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!