zoukankan      html  css  js  c++  java
  • ZOJ 3818 Pretty Poem 字符串

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


    题意:忽略标点,问该串能否构成ABABA或ABABCAB的形式,ABC均不相同。



    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std;
    bool j1(int l,char *s,int n){
        if(n<5)return false;            //小于5不满足条件
        if(l*2>=n)return false;
        int la=n-2*l;                   //la是A的长度
        if(la>=l)return false;          //A的长度大于等于AB,返回false
        for(int i=0;i<l;i++)
            if(s[i]!=s[i+l])return false;   //AB==AB?
        for(int i=0;i<la;i++)         
            if(s[i]!=s[i+2*l])return false; //A(B)==A?
        if(la==l-la){                       //检查AB是否相等
            bool bu=0;
            for(int i=0;i<la;i++)
                if(s[i]!=s[i+la])bu=1;
            if(bu==1)return true; 
            else return false;
        }//cout<<l<<endl<<la<<endl;
    }
    bool j2(int l,char *s,int n){
        if(n<7)return false;            //如果小于7不满足ABABCAB形式
        if(l*3>=n)return false;         //C为空串
        int lc=n-3*l;                   //LC为C的长度
        for(int i=0;i<l;i++){
            if(s[i]!=s[i+l]||s[i]!=s[i+n-l])return false;  //判断AB==AB?,AB==(C)AB?,
        }
        for(int i=1;i<l;i++){           //枚举A的长度1~(l-1);
            if(i==lc){                  //如果A的长度等于C
                bool ok=0;
                for(int j=0;j<i;j++)    //判断A==C?
                    if(s[j]!=s[2*l+j])ok=1;
                if(ok==0)continue;    
            }
            if(l-i==lc){                //如果B的长度等于C
                bool ok=0;
                for(int j=0;j<l-i;j++)  //判断B==C?
                    if(s[i+j]!=s[2*l+j])ok=1;
                if(ok==0)continue;
            }
            if(i==l-i){                 //如果A的长度等于B   
                bool ok=0;
                for(int j=0;j<i;j++)    //判断A==B?
                    if(s[j]!=s[i+j])ok=1;
                if(ok==0)continue;
            }
            return true;
        }
        return false;
    }
    bool ok(int l,char *s,int n){
        if(j1(l,s,n))return true;    //判断ABABA型
        if(j2(l,s,n))return true;    //判断ABABCAB型
        return false;
    }
    int main(){
       int T;
       scanf("%d",&T);
       while(T--){
           char fs[100];        //保存原串
           char s[100];         //保存去掉标点的串
           memset(s,'',sizeof(s));
           scanf("%s",fs);
           int l=strlen(fs);
           int n=0;
           for(int i=0;i<l;i++)
               if(fs[i]>='a'&&fs[i]<='z'||fs[i]>='A'&&fs[i]<='Z')s[n++]=fs[i];   //去掉标点符号
           bool get=0;                  //标记是否满足条件
           for(int i = n;i>=2;i--){      //从后向前枚举AB的长度,i是AB长度
               if(ok(i,s,n)){get=1;break;}
           }
           if(get==1)printf("Yes
    ");
           else printf("No
    ");
       }
       return 0;
    }
    


  • 相关阅读:
    实例演示:如何在Kubernetes上大规模运行CI/CD
    Word 2010文档自动生成目录和某页插入页码
    python用pyinstaller打包成exe文件
    C#建WindowForm调用R可视化
    Git Extension工具安装及使用
    python的scikit-learn的主要模块和基本使用
    NoSQL 数据库概览及其与 SQL 语法的比较
    Redis 搜索引擎优化
    图像卷积与滤波
    C# 编写 TensorFlow 人工智能应用
  • 原文地址:https://www.cnblogs.com/lzq1126/p/5596864.html
Copyright © 2011-2022 走看看