Period(kmp中next数组的运用)
来源:互联网 发布:软件开发资质证书 编辑:程序博客网 时间:2024/05/20 19:28
【题目来源】:https://vjudge.net/problem/HDU-1358
【题意】
给出一个长度为n的字符串,问,在字符1~n个里,前缀是周期串的是哪个?输出i,并且输出这i个字符里最小周期的个数k,并且,k不能是1。
举个例子说明一下:
abcabcabcabc
那么输出:
6 2
9 3
12 4。
先是字符串:abcabc,是周期串,最小周期是3,k是2(也就是有两个最小周期),以此类推,。
【思路】
依旧利用kmp中的next数组,这一题类似于Cyclic Nacklace,只不过那一道是给你固定的长度,而这个是给了一个范围,直接for循环暴力。
最重要的是要明白next数组存的内容代表什么,最好自己模拟一遍写出next数组。会发现,当前的长度减去当前的next值就是当前前缀的最下周期。
【代码】
#include<set>#include<map>#include<stack>#include<cmath>#include<queue>#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<limits.h>#include<algorithm>#define mem(a,b) memset(a,b,sizeof(a))using namespace std;const int mod=1e9+7;const double esp=1e-5;typedef unsigned long long ll;typedef long long LL;char s[1000000+10];int nexts[1000000+10];int len;void get_next(){ int i=0,j; j=nexts[0]=-1; while(i<len) { while(-1!=j&&s[i]!=s[j]) j=nexts[j]; nexts[++i]=++j; }}int main(){ int cases=1; while(~scanf("%d%*c",&len)&&len) { scanf("%s",s); get_next();// for(int i=0;i<=len;i++)// {// printf("%d ",nexts[i]);// }// printf("\n"); printf("Test case #%d\n",cases++); for(int i=0;i<len;i++) { int x=i+1; int y=x-nexts[x]; if(x%y==0&&x/y!=1) { printf("%d %d\n",x,x/y); } } printf("\n"); }}
阅读全文
0 0
- Period(kmp中next数组的运用)
- HDU 1358 Period(KMP+next数组的运用)
- 1358 Period hdu kmp的next数组运用
- HDOJ 1358 Period(KMP next数组运用)
- kmp中next数组的运用
- HDOJ 1358.Period(KMP中next数组应用)
- Cyclic Nacklace (kmp中next数组的运用)
- The Minimum Length (kmp中next数组的运用)
- Power Strings (kmp中next数组的运用)
- HDOJ1358 Period (KMP next数组应用)
- FZU - 1901 Period II(KMP next数组的理解)
- POJ 1961 Period KMP next数组的应用
- [kmp算法next数组的应用][poj1961]Period
- poj 1961 Period(未优化KMP的next数组)
- poj 2752 KMP(next数组的运用)
- Count the string (kmp的next数组运用)
- KMP的next数组性质运用
- HDU 3746(KMP)next数组的运用
- 【C++】【LeetCode】21. Merge Two Sorted Lists
- Android开发之--android调用手机存在的地图进行定位
- 【人工智能概念】看热闹篇
- Linux常用命令
- oracle 常用命令(查看oracle字符集)
- Period(kmp中next数组的运用)
- mysql命令行出现输入错误时如何返回修改前边的命令
- ARIMA模型
- 关于安卓实现新闻发布
- POJ3613 Cow Relays
- Java中几种集合(List、Set和Map)的区别
- Docker守护进程的配置及日志
- flashback_transaction_query 执行闪回事务查询时列operation全是unknown 而且undo_sql为空
- Web应用程序项目XXX已配置为使用IIS