现在的位置: 首页 > 综合 > 正文

ZOJ 3818 Pretty Poem The 2014 ACM-ICPC Asia Mudanjiang Regional First Round

2018年04月25日 ⁄ 综合 ⁄ 共 1608字 ⁄ 字号 评论关闭

这一题就是用暴力枚举,但是很多case我之前没有考虑到,结果WA得很惨。

一个是要排除A B C为空字符串的case,这个在枚举长度的时候就可以注意到。

另外一处是因为我逻辑混乱,if先找到AB的组合,如果AB前半部分和后半部分两部分相等,并不代表组合不存在。。。

感谢这里强大的数据:http://blog.csdn.net/xhldtc/article/details/39135475

另外感觉这种枚举方法会不会不容易WA http://blog.csdn.net/u011345136/article/details/39122729

#include<iostream>
#include<stdio.h>
#include<cstdio>
#include<stdlib.h>
#include<vector>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<stack>
#include<queue>
#include <ctype.h>
using namespace std;

int T;
string s;
void input()
{
    s.clear();
    //cout<<s<<endl;
    char tmp[60];
    scanf("%s",tmp);
    int ll=strlen(tmp);
    //cout<<ll<<endl;
    for(int i=0;i<ll;i++)
    {
        if(isalpha(tmp[i]))
            s+=tmp[i];
    }
    //cout<<s<<endl;
}
void run()
{
    int len=s.length();
    //cout<<len<<endl;
    for(int i=2;i<=len/2;i++)
    {
        string a=s.substr(0,i);
        string b=s.substr(i,i);
        if(a==b)
        {
            //if(a.length()%2==0&&s.substr(0,i/2)==s.substr(i/2,i/2)) continue; 这种case下 A B如果长度不等,组合也可能存在,
            int l=len-2*i;
            if(l==0) continue;
            if(l<i)
            {
                string c=s.substr(2*i,l);
                string d=s.substr(0,l);
                string f=s.substr(l,i-l);
                if(c==d&&d!=f)
                {
                   // cout<<i<<endl;
                    printf("Yes\n");
                    return;
                }
            }
            else if(l>i)
            {
               // if(i==7) cout<<i<<" "<<l<<endl;
                string e=s.substr(len-i,i);
                string g=s.substr(2*i,l-i);//C
                //cout<<"C:"<<g<<endl;
               //cout<<a<<" "<<e<<" "<<g<<endl;
                if(a==e)
                {
                    for(int k=1;k<i;k++)
                    {
                        string h=s.substr(0,k);//A
                        string x=s.substr(k,i-k);//B
                      //  if(k==1) cout<<h<<" "<<x<<endl;
                        if(h!=x&&h!=g&&x!=g)
                        {
                           // cout<<h<<"B:"<<x<<"C:"<<g<<endl;
                            //cout<<i<<" "<<l<<" "<<k<<endl;
                            printf("Yes\n");
                            return;
                        }
                    }
//
//                    cout<<h<<" "<<x<<endl;
//                    if(h!=g&&g!=x)
//                    {
//                        //cout<<i<<" "<<l<<endl;
//
//                    }

                }
            }
        }


    }
     printf("No\n");

}
int main()
{
    freopen("input.txt","r",stdin);
    scanf("%d",&T);
    for(int i=0;i<T;i++)
    {
        input();
        run();
    }
    return 0;
}

抱歉!评论已关闭.