poj1961 kmp
题目大意,求这个字符串到i为止有多少个循环串;
int k = i-next[i];
if((i+1)%k == 0 && (i+1)!= k)
printf("%d %d\n", i+1, (i+1)/k);
这是代码的主要部分,求next数组的部分大家都知道,我来说说这部分的正确性;
例如一个字符串的第99为指向第96位,也就是说后4-99位和前1-96位是匹配的,就是说94到96与97到99是是匹配的;
而且91-94与94-96是匹配的。。。。。。。。。。。
一直可以推到最前面,以上就是正确性啦~
上代码
#include <iostream>
#include <string.h>
#include <map>
#include <stdio.h>
using namespace std;
const int maxa =1000005;
int next[maxa];
int vis[maxa];
int n;
void init_kmp(char str[])
{
memset(vis, 0, sizeof(vis));
next[0]=-1;
for(int i=1;str[i]!=0;i++)
{
int j= next[i-1];
while(str[j+1]!=str[i]&&j>=0)
j= next[j];
if(str[j+1] == str[i])
next[i] = j + 1;
else
next[i] = -1;
}
}
int main(){
char str[maxa];
int d =1;
while(scanf("%d", &n), n){
scanf("%s", str);
printf("Test case #%d\n", d++);
init_kmp(str);
for(int i = 0; i < n; i++){
int k = i-next[i];
if((i+1)%k == 0 && (i+1)!= k)
printf("%d %d\n", i+1, (i+1)/k);
}
printf("\n");
}
}
poj1961 kmp的更多相关文章
- POJ1961 KMP算法
POJ1961 问题重述: 输入一个长度为l的字符串S,求所有S的由字串重复排列而成的前缀,并输出前缀的长度以及该前缀的最大重复度. AC代码: //Memory: 5700K Time: 641MS ...
- POJ1961[KMP 失配函数]
Period Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 16776 Accepted: 8077 Descripti ...
- poj1961 Period kmp解决找字符串的最小循环节
/** 题目:poj1961 Period 链接:http://poj.org/problem?id=1961 题意:求从1到i这个前缀(2<=i<=N) ,如果有循环节(不能自身单独一个 ...
- [POJ2406&POJ1961]用KMP解决字符串的循环问题两例
翻阅了一下网上资料,发现大部分都说这题是找规律...或是说YY出的一个算法..不会证明... 然后就脑补了一下证明 ~ 结论:对于一个字符串S[1..N],如果N mod (N-next[N])=0 ...
- poj1961(kmp算法next数组应用)
题目链接:https://vjudge.net/problem/POJ-1961 题意:给定一个长为n的字符串(n<=1e6),对于下标i(2<=i<=n),如果子串s(1...i) ...
- [POJ1961]Period (KMP)
题意 求字符串s的最小循环元长度和循环次数 思路 s[1~i]满足循环元要len能整除i并且s[len+1~i]=s[1~i-len] 代码 #include<cstdio> #inclu ...
- poj1961 & hdu1358 Period【KMP】
Period Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 20436 Accepted: 9961 Descripti ...
- 【POJ1961 Period】【KMP】
题面 一个字符串的前缀是从第一个字符开始的连续若干个字符,例如"abaab"共有5个前缀,分别是a, ab, aba, abaa, abaab. 我们希望知道一个N位字符串S的前缀 ...
- 【POJ1961】最短周期串/最大周期 kmp
引理:\(s[1,i]\) 具有长度为 \(len\) 的循环节的充要条件是:\(len\ |\ i,s[1,i-len]=s[len+1,i]\). 代码如下 #include <cstdio ...
随机推荐
- sql错误代码一览表
http://docstore.mik.ua/orelly/java-ent/jenut/ch08_06.htm Table 8-3. SQL-92 SQLSTATE Return Codes Cla ...
- Css 八卦
<div class="box"> <div class="right_d"></div> <span class=& ...
- C程序设计语言练习题1-17
练习1-17 编写一个程序,打印长度大于80个字符的所有输入行. 代码如下: #include <stdio.h> // 包含标准库的信息. #define MAXROW 10 // 最大 ...
- 信息安全实验二:return-to-libc
title: return-to-libc date: 2016-01-11 17:40:30 categories: information-security tags: return-to-lib ...
- Android利用百度地图定位
百度地图照着百度的教程做的总是出现报错 请帮我看看错误在那 2013-12-13 15:16168海军 | 分类:百度地图 | 浏览1252次 java.lang.RuntimeException: ...
- 标签 Attribute
在一个类上面放一个标签,可以用来表示一些特定规则,比如某个对象的某个属性不想被json化,那么我们在它头上放个标签就行了,或是做ORM时指定某个Class对应的table名字等. 最后标签是通过反射来 ...
- 有意思的数学题:Trapping Rain Water
LeetCode传送门 https://leetcode.com/problems/trapping-rain-water/ 目标:找出积木能容纳的水的“面积”,如图中黑色部分是积木,蓝色为可容纳水的 ...
- (2015多校第6场)HDU5361--In Touch (Dijkstra应用)
In Touch Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
- Shell脚本常用命令简介
格式化日期yyyy-mm-dd hh:mm:ss显示 date "+%Y-%m-%d %H:%M:%S" 将内容写入到新文件 echo "hello">a ...
- JBossESB教程(二)——将JBossESB部署到JBossAS中
前言 上篇讲了JBossESB的环境搭建,但是细心的同学会发现,我们在添加JBoss AS的时候,实际上添加的是jbossesb-server,而这个里面是没有EJB的支持的.如果我们想要使开发环境能 ...