uvalive3026 Period (KMP+结论)
题目链接:http://vjudge.net/problem/viewProblem.action?id=29342
题目大意:给定字符串,找到每个前缀的最大循环节的个数。
首先当然是kmp预处理,接下来的问题是 怎么找循环节?
用反证法可以证明,如果f[i]~i之间的字符串能构成循环节,则该字符串就是i前缀对应的循环节,否则循环节不存在。
对每个前缀找到尾指针对应的失陪位置后,不需要按失陪指针继续往前寻找了(否则超时)。
只用判断上个位置到尾部的字符串是否是循环节(长度是否有整除关系),即知循环节个数。
代码奉上:
#include <stdio.h>
#include <algorithm>
#include <stdlib.h>
#include <cstring> int f[];
char p[];
void deal(int l){
f[]=-;
int i=,k=-;
while(i<l){
if(k==- || p[k]==p[i])f[++i]=++k;
else k=f[k];
}
//for(i=0;i<l;i++)printf("%d: %d\n",i,f[i]);
}
int main(){
int n,cs=;
while(scanf("%d",&n) && n){
scanf("%s",p);
deal(n);
printf("Test case #%d\n",cs++);
int i,k;
for(i=;i<=n;i++){
if(f[i]== || i%(i-f[i]))continue;
k=i/(i-f[i]);
if(k>)printf("%d %d\n",i,k);
}
printf("\n"); }
return ;
}
证明没有仔细说,不明白的欢迎留言讨论~
uvalive3026 Period (KMP+结论)的更多相关文章
- POJ 1961 Period( KMP )*
Period Time Limit: 3000MSMemory Limit: 30000K Total Submissions: 12089Accepted: 5656 Description For ...
- hdu oj Period (kmp的应用)
Period Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- hdu 1358 period KMP入门
Period 题意:一个长为N (2 <= N <= 1 000 000) 的字符串,问前缀串长度为k(k > 1)是否是一个周期串,即k = A...A;若是则按k从小到大的顺序输 ...
- LA3026 - Period(KMP)
For each prefix of a given string S with N characters (each character has an ASCII code between 97 a ...
- poj1961 Period kmp解决找字符串的最小循环节
/** 题目:poj1961 Period 链接:http://poj.org/problem?id=1961 题意:求从1到i这个前缀(2<=i<=N) ,如果有循环节(不能自身单独一个 ...
- HDU1358 Period —— KMP 最小循环节
题目链接:https://vjudge.net/problem/HDU-1358 Period Time Limit: 2000/1000 MS (Java/Others) Memory Lim ...
- hdu 1358 Period(KMP入门题)
Period Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- HDU 1358 Period(KMP next数组运用)
Period Problem Description For each prefix of a given string S with N characters (each character has ...
- UVA 1328 - Period KMP
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=36131 题意:给出一个长度为n的字符串,要求找到一些i,满足说从1 ...
随机推荐
- Java native(转)
Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能. 可以将 ...
- BZOJ 1053 [HAOI2007]反素数ant
1053: [HAOI2007]反素数ant Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1948 Solved: 1094[Submit][St ...
- HDOJ(HDU) 2212 DFS(阶乘相关、)
Problem Description A DFS(digital factorial sum) number is found by summing the factorial of every d ...
- MVC4 中Remote的使用
相信当你看到这篇文章的时候对remote是有一些了解了, 起码知道这个东西是来干嘛用的. 这里也就不废话了 直接上代码 看看Remote的一些使用方式. 1.判断表单上输入的数据是否存在 [Syst ...
- Interesting Punch-Bowl(优先队列)
/** http://acm.nyist.net/JudgeOnline/problem.php?pid=547 题意: 有一个正方形的区域 区域上面有高度不同的1*1的立方体自然有凸有凹 凹的地方可 ...
- python 解析xml 文件: Element Tree 方式
环境 python:3.4.4 准备xml文件 首先新建一个xml文件,countries.xml.内容是在python官网上看到的. <?xml version="1.0" ...
- linux —— 学习笔记(软件操作:安装、卸载、执行)
目录: 0.相关基本命令 1.安装软件 2.卸载软件 3.打开软件 0.相关基本命令 与软件操作相关的主要命令有:dpkg 和 apt-get . dpkg : “dpkg ...
- 关于openoffice英文乱码的问题
首先选中乱码的部分,然后在右边的侧栏中看到其字体,尝试改变它的字体,看会不会显示正常,如果可以,先记住这两种字体.然后: 工具->选项->字体 然后在使用替换表打上勾, ...
- 表格布局TableLayout
简单实现计算机界面布局的案例: <?xml version="1.0" encoding="utf-8"?><TableLayout xmln ...
- selenium webdriver启动IE浏览器失败的解决办法
通过selenium webdriver启动IE浏览器失败,报错:selenium.common.exceptions.WebDriverException: Message: Unexpected ...