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;
      }
    柳暗花明又一村
  • 相关阅读:
    一些手打的笔记
    字符集的相关知识
    Java的概述以及语法
    Java和eclipxe的安装以及第一个程序
    制作Html标签以及表单、表格内容
    2,8,10,16进制之间的转换
    验证日期时间
    验证输入一个月的31天
    验证输入一年的12个月
    身份证号验证
  • 原文地址:https://www.cnblogs.com/ucandoit/p/8371626.html
Copyright © 2011-2022 走看看