zoukankan      html  css  js  c++  java
  • UVa 1328 Period

     1 数据范围较大,故用KMP求循环节
     2 
     3 之后由小到大枚举长度范围,若该长度下有循环节就输出答案
     4 
     5 还要注意输出格式。之前测试时候连着一串presentation error也是悲伤
     6 
     7 
     8 #include<bits/stdc++.h>
     9 using namespace std;
    10 char c[1000500];
    11 int ne[1000500];
    12 int n;
    13 void kmp(char s[]){
    14     ne[0]=0;//题目要求最小循环长度为2
    15     ne[1]=0;
    16     int i,j;
    17     for(i=1;i<n;i++){
    18         j=ne[i];
    19         while(j && c[i]!=c[j])j=ne[j];
    20         if(c[i]==c[j])j++;
    21         ne[i+1]=j;
    22     } 
    23     return;
    24 }
    25 int main(){
    26     int T=1;
    27     while(scanf("%d",&n) && n){
    28         printf("Test case #%d
    ",T++);
    29         scanf("%s",c);
    30         kmp(c);
    31         int i;
    32         for(i=2;i<=n;i++){//查找循环节
    33             if(ne[i] && i%(i-ne[i])==0)
    34               printf("%d %d
    ",i,i/(i-ne[i]));
    35         }
    36         printf("
    ");
    37     }
    38     return 0;
    39 }



  • 相关阅读:
    文字标签和注释标签
    HTML文档的组成和标签的规范
    HTML概述
    javaWeb
    web开发的三层架构
    ASCII码表
    JDK的新特性
    Editplus的运行JAVA的配置
    Eclipse的断点调试
    Eclipse工作空间的基本配置
  • 原文地址:https://www.cnblogs.com/SilverNebula/p/5550595.html
Copyright © 2011-2022 走看看