zoukankan      html  css  js  c++  java
  • UVA

    求一段长度为k的字符串的最小重复周期(k<=80),代码:

    思路:

    周期串长度n必然能被k整除,在这一条件下,对周期小于k/2的,进行验证,验证k/n-1次,取最先成功的重复周期长度或k为最终结果

    小技巧:

    如果题目要求“两结果之间”有换行,那么对于最后一个case,可利用以下代码高亮处的方式来处理,使代码更简洁美观巧妙。

    #include"iostream"
    #include"cctype"
    #include"cstring"
    using namespace std;
    #define maxn 85
    //#define local
    
    int judge(char *s,int k,int len)       
    {
        int n=len/k;                         //倍数/比较几次 
        for(int j=1;j<n;j++)
        for(int i=0;i<k;i++) if(s[i]!=s[i+j*k]) return 0;
        
        return 1;
    }
    
    int main()
    {    
        #ifdef local
        freopen("UVa_in.txt","r",stdin);
    //    freopen("UVa_out.txt","w",stdout);
        #endif
        
        char s[maxn];
        int cont,len;
        scanf("%d",&cont);
    
        while(cont--){
                
            scanf("%s",s);
            len=strlen(s);
            int mark=1;
            for(int i=1;i<=len/2;i++){                 //被比较串的结尾com,由0->len-1 
                if(len%i==0)
                    if(judge(s,i,len))
                    {
                    cout<<i<<endl;
                    mark=0;
                    break;
                    }
             }
             if(mark==1)
            cout<<len<<endl;
            if(cont)cout<<endl;
            
          }
              return 0;
      }
    柳暗花明又一村
  • 相关阅读:
    RedHat Linux-配置YUM仓库
    04、管道符、重定向与环境变量
    03、新手必须掌握的Linux命令
    size_t
    decltype关键字
    python numpy使用笔记
    Huffman编码
    动态规划(dynamic programming)
    Prim算法
    Kruskal算法
  • 原文地址:https://www.cnblogs.com/ucandoit/p/8371626.html
Copyright © 2011-2022 走看看