Period(kmp)
Period
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 4437 Accepted Submission(s): 2145
这个k需要大于1。于是我们可以想到,next【i】的值就是长度,当i%next[i]==0是开始匹配i/next[i]便是重复度k;
#include<stdio.h>
const int MAXN=;
int N;
char m[MAXN];
int next[MAXN];
void getnext(){
int i=,j=-;
next[i]=j;
while(i<N){
if(j==-||m[i]==m[j]){
i++;j++;
next[i]=j;
}
else j=next[j];
}
}
void print(int x){
for(int i=;i<=x;i++){
if(next[i]!=&&i%(i-next[i])==)printf("%d %d\n",i,i/(i-next[i]));
}
}
int main(){
int flot=;
while(~scanf("%d",&N),N){
scanf("%s",m);
getnext();
//for(int i=0;i<=N;i++)printf("%d ",next[i]);puts("");
//if(flot)puts("");
printf("Test case #%d\n",++flot);
print(N);
puts("");
}
return ;
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long LL;
#define mem(x,y) memset(x,y,sizeof(x))
#define SI(x) scanf("%d",&x)
#define PI(x) printf("%d",x)
#define P_ printf(" ")
const int INF=0x3f3f3f3f;
const int MAXN=;
int p[MAXN];
char s[MAXN];
int N;
void getp(){
int i=,j=-;
p[]=-;
while(i<N){
if(j==-||s[i]==s[j]){
i++;j++;p[i]=j;
if(s[i]!=-&&i%(i-p[i])==&&i/(i-p[i])>){
printf("%d %d\n",i,i/(i-p[i]));
}
}
else j=p[j];
}
}
/*
void kmp(int& ans){
getp();
int j=0,i=0;
while(i<N){
if(j==-1||s[j]==m[i]){
i++;j++;
if(j==M){
ans=i-j+1;
return ;
}
}
else j=p[j];
}
}
*/
int main(){
int kase=;
while(~scanf("%d",&N),N){
scanf("%s",s);
printf("Test case #%d\n",++kase);
getp();
puts("");
}
return ;
}
Period(kmp)的更多相关文章
- HDU - 1358 - Period (KMP)
Period Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- POJ 1961 Period(KMP)
http://poj.org/problem?id=1961 题意 :给你一个字符串,让你输出到第几个字符时,循环结的个数. 思路 :这个题和2409差不多,稍微修改一下,加一个循环就行了,用的也是K ...
- poj2406 Power Strings(kmp)
poj2406 Power Strings(kmp) 给出一个字符串,问这个字符串是一个字符串重复几次.要求最大化重复次数. 若当前字符串为S,用kmp匹配'\0'+S和S即可. #include & ...
- HDU 1358 Period(kmp简单解决)
Period Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- POJ 2406 Power Strings(KMP)
Description Given two strings a and b we define a*b to be their concatenation. For example, if a = & ...
- LightOJ 1258 Making Huge Palindromes(KMP)
题意 给定一个字符串 \(S\) ,一次操作可以在这个字符串的右边增加任意一个字符.求操作之后的最短字符串,满足操作结束后的字符串是回文. \(1 \leq |S| \leq 10^6\) 思路 \( ...
- codeM编程大赛E题 (暴力+字符串匹配(kmp))
题目大意:S(n,k)用k(2-16)进制表示1-n的数字所组成的字符串,例如S(16,16)=123456789ABCDEF10: 解题思路: n最大50000,k最大100000,以为暴力会超时. ...
- 经典串匹配算法(KMP)解析
一.问题重述 现有字符串S1,求S1中与字符串S2完全匹配的部分,例如: S1 = "ababaababc" S2 = "ababc" 那么得到匹配的结果是5( ...
- URAL 1732 Ministry of Truth(KMP)
Description In whiteblack on blackwhite is written the utterance that has been censored by the Minis ...
随机推荐
- 【CF 675D Tree Construction】BST
题目链接:http://codeforces.com/problemset/problem/675/D 题意:给一个由n个互异整数组成的序列a[],模拟BST的插入过程,依次输出每插入一个元素a[i] ...
- Python的ASCII, GB2312, Unicode , UTF-8 相互转换
ASCII 是一种字符集,包括大小写的英文字母.数字.控制字符等,它用一个字节表示,范围是 0-127 Unicode分为UTF-8和UTF-16.UTF-8变长度的,最多 6 个字节,小于 127 ...
- 认识SVN
TortoiseSVN 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录.文件保存在中央版本库,除了能记住文件和目录的每次修改以外,版本库非常像普通的文件 服务 ...
- SHDP--Working With HBase (二)之HBase JDBC驱动Phoenix与SpringJDBCTemplate的集成
Phoenix:Phoenix将SQL查询语句转换成多个scan操作,并编排执行最终生成标准的JDBC结果集. Spring将数据库访问的样式代码提取到JDBC模板类中,JDBC模板还承担了资源管 ...
- LINQ To XML的一些方法
1.Elements() 返回XML文档或片段的所有第一级元素. 2.Descendants() 返回XML文档或片段中的所有子元素(所有级别的子元素). 3.Attributes() 返回当前选中元 ...
- C#入门(一):IDE
设计流程 .NET可视化对象 创建工程的时候,会创建三个文件 Form1.cs Form1.Designer.cs Program.cs 当增加一个控件的时候,会在Form1.Designer.cs增 ...
- 关于JavaScript 原型的理解
原型的含义是指:如果构造器有个原型对象A,则由该构造器创建的实例(Object Instance)都必然复制于A.““在JavaScript中,对象实例(Object Instance)并没有原型,而 ...
- DNS,ARP,RARP,NAT,WINS的作用和区别
DNS 域名服务系统,是将域名(比如www.cnblogs.com)转成ip地址.arp 地址转换协议,是将ip地址转成mac地址(物理地址,可用ipconfig /all查看).rarp从mac转到 ...
- BlazeDS简介(转自openkk的日志)
BlazeDS 是一个基于服务器的 Java 远程控制 (remoting) 和 Web 消息传递 (messaging) 技术,以LGPL(Lesser GNU Public License)公共许 ...
- const的一些总结
const的一些总结 采用const符号常量写出来的代码更容易维护,有些函数只读不写: 1 常变量: const 类型说明符 变量名 2 常引用: const 类型说明符 &变量名 3 常成员 ...