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

【瞎搞】ZOJ 3818 Pretty Poem 牡丹江网络赛J题

时间:2014-09-07 19:51:44      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:style   os   io   ar   for   sp   html   on   c   


第一种情况:ABABA。 先判断开头的A与结尾的A,得到A的长度,接着判断ABAB 中的AB与AB是否相同(ABAB的长度一定为偶数)

已经知道了A长度,AB的长度 接着判断下A 与B是否相同

第二种情况:ABABCAB-可先讲AB看成整体即DDCD 若存在一个D满足条件 可得到C的长度和位置再判断A-B是否相同A-C是否相同 B-C是否相同(暴力取A的长度咯)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <string>
#include <iostream>
#include <algorithm>
#include <sstream>
using namespace std;
#include <queue>
#include <stack>
#include <vector>
#include <deque>
#include <set>
#include <map>
#define cler(arr, val)    memset(arr, val, sizeof(arr))
#define IN     freopen ("in.txt" , "r" , stdin);
#define OUT  freopen ("out.txt" , "w" , stdout);
typedef long long  LL;
const int MAXN = 1000006;//点数的最大值
const int MAXM = 20006;//边数的最大值
const int INF = 11521204;
const int mod=1000000007;
char s[222];
char out[222];
bool jug(char c)
{
    if(('a'<=c&&c<='z')||('A'<=c&&c<='Z'))
        return 1;
    else return 0;
}
int main()
{
    int t;
   // IN;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%s",s);
        int len=strlen(s),n=0;
        for(int i=0; i<len; i++)
        {
            if(jug(s[i]))
            {
                out[n++]=s[i];
            }
        }
        out[n]=0;
        int flag=0;
        //第一种情况 ABABA
        for(int j=1; j<=(n-2)/3; j++)
        {
            int sum=0;
            for(int k=0; k<j; k++)
            {
                if(out[k]==out[n-j+k])
                    sum++;
            }
            if(sum==j&&(n-j)%2==0)
            {
                sum=0;
                int sum1=0,flag11=0;
                for(int k=0; k<(n-j)/2; k++)
                {
                    if(out[k]==out[(n-j)/2+k])
                        sum++;
                }
                if(j==(n-j)/2-j)
                {
                    for(int k=0; k<j; k++)
                    {
                        if(out[k]==out[k+j])
                            sum1++;
                    }
                    if(sum1==j)
                        flag11=1;
                }
                if(sum==(n-j)/2&&flag11==0)
                    flag=1;
            }

        }
        //第二种AABA
        for(int j=2; j<=(n-1)/3; j++)
        {
            int sum=0;
            for(int k=0; k<j; k++)
            {
                if(out[k]==out[n-j+k]&&out[k]==out[k+j])
                    sum++;
            }
            if(sum==j&&(n-3*j)>0)
            {
                int xx=n-3*j;
                for(int w=1; w<j; w++)
                {
                    int sum1=0,sum2=0,flag11=0;
                    sum=0;
                    for(int k=0; k<w; k++)
                    {
                        if(out[k]==out[k+j-w])
                            sum++;
                    }
                    for(int k=0; k<xx&&k<w; k++) //判断a与c是否相同
                    {
                        if(out[k]==out[j*2+k])
                            sum1++;
                    }
                    for(int k=2*j-1; k>=2*j-xx&&k>=j+w; k--) //判断b与c是否相同
                    {
                        if(out[k]==out[k+xx])
                            sum2++;
                    }
                    if(sum==w&&sum==j-w) flag11=1;
                    if(sum1==xx&&sum1==w) flag11=1;
                    if(sum2==xx&&sum2==j-w) flag11=1;
                    if(!flag11)
                        flag=1;
                }
            }
        }
        if(flag==1)
            printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}
/*
8
xyxyxxy
xyxyyxy
xxxxyxx
xxxxx
xyxyx
xxxxxxxx
xxxxxxxxxxxxx
xyzzxyzxyzzxyzxyzxyzzxyz
no
no
no
no
yes
yes
yes
yes
*/


【瞎搞】ZOJ 3818 Pretty Poem 牡丹江网络赛J题

标签:style   os   io   ar   for   sp   html   on   c   

原文地址:http://blog.csdn.net/kewowlo/article/details/39121405

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