我要一步一步往上爬
蜗牛
POJ 1961 C++ (KMP)
#include<iostream>
using namespace std;
int n,next[1000008];
char s[1000008];
void Get_next()
{int j,k;
j=1;
k=0;
next[1]=0;
while(j<=n+1)
{ if(k==0 || s[j]==s[k])
{ j++;
k++;
next[j]=k;
}
else
k=next[k];
}
}
int main()
{ int i,cnt,k;
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
k=1;
while(scanf("%d\n",&n),n!=0)
{ for(i=1;i<=n;i++)
s[i]=getchar();
s[i]='#';
Get_next();
printf("Test case #%d\n",k++);
for(i=2;i<=n;i++)
if(i%(i+1-next[i+1])==0)
{ cnt=i/(i+1-next[i+1]);
if(cnt!=1)
printf("%d %d\n",i,cnt);
}
printf("\n");
}
return 0;
}
该题的题意是这样的,给若干个字符串,判断该字符串的前n位最多重复了几次,比如,给ababab,结果是前4位重复了2次,前6位重复了3次,忽略重复一次的情况.现在我们将注意力放在一个给定的字符串重复了多少次,然后做一个循环就可以求出所有的结果。
我们要根据kmp算法中的next函数来解决这个问题,以ababab为例加以说明:
String:ababab
Next: 0112345
这里根据后面的需要多计算了一位next值。
我们用ababab即作为主串有作为模式串来进行匹配,假设匹配到第7为时不匹配了(下标中1开始),要根据next[7](=5)的值继续匹配:
ababab*
ababab&
ababab*
ababab
这样,我们用(length+1)-next[length+1]就是字符串向右移动的位数,在该例中为7-5=2.然后用总的长度除以这个向右移动的位数,如果能除尽的话,结果就是重复的次数,否则重复的次数为1
posted on 2008-11-26 01:13
蜗牛
阅读(868)
评论(0)
编辑
收藏
引用
所属分类:
ACM ICPC
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
POJ 1083 C++ (水题)
POJ 3041 C++ (图论)
POJ 1496 C++ (图论)
POJ 3020 C++ (图论)
POJ 1087 C++ (图论)
POJ 1459 C++ (图论)
POJ 1094 C++ (图论)
POJ 1062 Java (图论)
POJ 1125 C++ (图论)
POJ 2253 C++ (图论)
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
Powered by:
C++博客
Copyright © 蜗牛
<
2008年11月
>
日
一
二
三
四
五
六
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
导航
C++博客
首页
新随笔
联系
聚合
管理
统计
随笔 - 20
文章 - 0
评论 - 4
引用 - 0
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔分类
(20)
ACM ICPC(19)
(rss)
My life(1)
(rss)
随笔档案
(20)
2008年11月 (20)
Favorites
HUNAN UNIVERSITY ACM/ICPC Judge Online
(rss)
在湖大的网站上洒汗了三个月, 如今转北大的在线答题网站了, 但还是挺怀念那段日子的, 简单而充实。
My qq stone
(rss)
苦心经营了三年的空间, 里面有我全部的大学生活, 小说,散文,诗歌,瞎侃,那是应有尽有……
PKU JudgeOnline
(rss)
在北大做题已快两个月, 感该颇多,那牛人是贼多贼多的, 在下是见识了.
搜索
最新评论
1. re: POJ 3295 C++ (图论)
是poj3259吧。。。呵呵。。。
--天青色~~
2. re: POJ 2240 C++ (图论)[未登录]
效率低下!!!
--dd
3. re: 关于
我的经历和学长有点相似
想来学长现在已经毕业了,一路走好
--Leng
4. re: POJ 1694 C++ (排序)
sdadhouO UourepoUDJZSLM aqi sOUEOPQUeo iwoqye-
--qweq
阅读排行榜
1. POJ 3295 C++ (图论)(3182)
2. POJ 1062 Java (图论)(1702)
3. POJ 1860 C++ (图论)(1648)
4. POJ 1459 C++ (图论)(1592)
5. POJ 1094 C++ (图论)(1424)
评论排行榜
1. POJ 2240 C++ (图论)(1)
2. POJ 3295 C++ (图论)(1)
3. POJ 1694 C++ (排序)(1)
4. 关于(1)
5. POJ 2752 C++ (KMP)(0)