参考:http://www.cnblogs.com/jackge/archive/2013/01/05/2846006.html

总结一下,如果对于next数组中的 i, 符合 i % ( i - next[i] ) == 0 && next[i] != 0 , 则说明字符串循环,而且

循环节长度为:   i - next[i]

循环次数为:       i / ( i - next[i] )

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <vector>
 5 #include <cstring>
 6 #include <string>
 7 #include <algorithm>
 8 #include <string>
 9 #include <set>
10 #include <functional>
11 #include <numeric>
12 #include <sstream>
13 #include <stack>
14 #include <map>
15 #include <queue>
16 #pragma comment(linker, "/STACK:102400000,102400000")
17 #define CL(arr, val)    memset(arr, val, sizeof(arr))
18
19 #define ll long long
20 #define inf 0x7f7f7f7f
21 #define lc l,m,rt<<1
22 #define rc m + 1,r,rt<<1|1
23 #define pi acos(-1.0)
24
25 #define L(x)    (x) << 1
26 #define R(x)    (x) << 1 | 1
27 #define MID(l, r)   (l + r) >> 1
28 #define Min(x, y)   (x) < (y) ? (x) : (y)
29 #define Max(x, y)   (x) < (y) ? (y) : (x)
30 #define E(x)        (1 << (x))
31 #define iabs(x)     (x) < 0 ? -(x) : (x)
32 #define OUT(x)  printf("%I64d\n", x)
33 #define lowbit(x)   (x)&(-x)
34 #define Read()  freopen("a.txt", "r", stdin)
35 #define Write() freopen("b.txt", "w", stdout);
36 #define maxn 1000000000
37 #define N 2510
38 #define mod 1000000000
39 using namespace std;
40
41 char a[1000010];
42 int p[1000010];
43 void next(int l)
44 {
45     int j=0;
46     p[1]=0;
47     for(int i=2;i<=l;i++)
48     {
49         while(j>0&&(a[j+1]!=a[i])) j=p[j];
50         if(a[j+1]==a[i]) j+=1;
51         p[i]=j;
52     }
53 }
54 int main()
55 {
56     //freopen("a.txt","r",stdin);
57     int n,j=1;
58     while(~scanf("%d",&n))
59     {
60         if(n==0) break;
61         printf("Test case #%d\n",j++);
62         scanf("%s",a+1);
63         int l=strlen(a+1);
64         next(l);
65         for(int i=1;i<=l;i++)
66         {
67             if(i%(i-p[i])==0&&p[i]!=0)
68             {
69                 printf("%d %d\n",i,i/(i-p[i]));
70             }
71         }
72         printf("\n");
73     }
74     return 0;
75 }

转载于:https://www.cnblogs.com/nowandforever/p/4601459.html

Uvalive - 3026 Period (kmp求字符串的最小循环节+最大重复次数)相关推荐

  1. 【HDU - 3746 】Cyclic Nacklace (KMP,最小循环节问题)

    题干: CC always becomes very depressed at the end of this month, he has checked his credit card yester ...

  2. kmp求最小循环节及最小循环周期

    只列出求最小循环节部分 for(int i=1;i<=n;i++){int temp=i-next[i];if(i%temp==0 && i/temp>1)printf(& ...

  3. UVALive 3026 Period (KMP算法简介)

    kmp的代码很短,但是不太容易理解,还是先说明一下这个算法过程吧. 朴素的字符串匹配大家都懂,但是效率不高,原因在哪里? 匹配过程没有充分利用已经匹配好的模版的信息,比如说, i是文本串当前字符的下标 ...

  4. MUV LUV EXTRA -( kmp最小循环节 )

    题目链接:点击进入 题意 一个无限循环小数( 从小数点后 某一位 开始依次不断地重复出现前一个或一节数字的十进制无限小数,叫做循环小数 ),真实价值 = a * p - b * l ( a , b 是 ...

  5. 【文文殿下】浅谈KMP算法next数组与循环节的关系

    KMP算法 KMP算法是一种字符串匹配算法,他可以在O(n+m)的时间内求出一个模式串在另一个模式串下出现的次数. KMP算法是利用next数组进行自匹配,然后来进行匹配的. Next数组 Next数 ...

  6. 求字符串中字符的出现的最多次数和最少次数,删除后并获得最终字符

    /* *功能描述:删除字符串中字符个数最少的字符,最少字符串有多个,最少的要全部删除 *               然后返回该子字符串. *输入:asdasdas *输出:asasas */ imp ...

  7. HDU - 1358 Period(KMP的next数组求最小循环节)

    题目链接:点击查看 题目大意:给出一个长度为n的字符串,问有哪些前缀是周期性字符串 题目分析:因为n给的很大,所以肯定不能暴力判断了,我们可以巧妙的利用kmp的next数组进行判断,next数组有一个 ...

  8. 2019 CCPC秦皇岛 J 题 MUV LUV EXTRA【KMP 求最小循环节】

    题意: 原题意是给出一个有理数的前一部分,求这个有理数的无限循环部分是什么.有一个值来评估猜的准确度.转换一下就成了下面的题意: 给出一个字符串s,有某一个子串,设p为该子串在s的某个后缀中的匹配长度 ...

  9. 字符串——OKR-Periods of Words(kmp求最短相同前后缀或者说求最长循环节)

    传送门:OKR-Periods of Words 思路:题目要求的是最大的前缀Q使得A是QQ的前缀,同时Q不能等于A, 比如在bababab,要使得周期最大,应该选的循环节就是bababa, 另一个有 ...

最新文章

  1. mysql 回收空间_MySQL表的碎片整理和空间回收小结
  2. selenium IE 浏览器驱动下载地方
  3. 最大子段和问题——详解(C++)
  4. SQLite内部机制和新特性
  5. HTML前端代码分析(查看网站黑链的几种方法)暗链是什么意思
  6. fastjson list转json
  7. 物理层下面的传输媒体
  8. nRF51822 DTM 测试 不能连续发送数据
  9. linux强制安装deb,ubuntu强行修改deb安装包依赖
  10. 有什么值得入手的蓝牙耳机品牌?2022年蓝牙耳机品牌排行榜
  11. 中国口腔医疗行业发展模式与投资战略规划分析报告2022-2028年版
  12. MachineLearning(Hsuan-Tien Lin)第一讲
  13. 笔记本WIN10 网络和Internet WLAN选项消失
  14. ThoughtWorks公司——算法岗位作业题(计算机生成迷宫)
  15. word排版技巧:这几种特殊版式轻松搞定
  16. KeilIAR生成库及库的说明与使用
  17. linux 不装显卡驱动 3d性能,Nouveau Gallium3D开源驱动N卡性能测试
  18. 面试题:java GC是在什么时候,对什么东西,做了什么事情?
  19. 【Linux基础】Linux下查看硬件配置
  20. 微信支付-电商收付通业务概述

热门文章

  1. Ubuntu进入pycharm创建的虚拟环境的方法(以及如果你安装了anaconda等其它修改了环境变量的东西该怎么进)
  2. 7.王道考研数据结构-队列
  3. OpenGL基础50:HDR
  4. C#基础2:简单乘法表
  5. 选择操作、投影操作、交操作
  6. bzoj 4001: [TJOI2015]概率论(找规律)
  7. python源码 高通滤波、低通滤波、带通滤波
  8. matlab2c使用c++实现matlab函数系列教程-harmmean函数
  9. 微波网络中插入相移插入衰减和输入驻波比
  10. shell里写个简单循环