poj 1961 Period 【KMP-next前缀数组的应用】
2024-09-02 18:13:51
题目地址:http://poj.org/problem?id=1961
Sample Input
3
aaa
12
aabaabaabaab
0
Sample Output
Test case #1
2 2
3 3 Test case #2
2 2
6 2
9 3
12 4 题目分析:给你一个字符串,最大长度1百万。输出是:以第1组样例解释,在aaa的字符串中,长度为2时,存在2个循环节a。当长度为3时,存在3个循环节a。
以第二组样例解释,当长度为2时,存在2个循环节a。当长度为6时,存在2个循环节aab。当长度为9时,存在3个循环节aab。依次类推下去。
此题就是poj 2406的难度加强版本。
code:
#include <stdio.h>
#include <string.h>
#include <stdio.h> char s[1000000+10];
int next[1000000+10]; void get_next(int len)
{
int i=0, j=-1;
next[0]=-1;
while(i!=len)
{
if(j==-1 || s[i]==s[j])
next[++i]=++j;
else
j=next[j];
}
} int main()
{
int n;
int i, j, len;
int cnt=1;
while(scanf("%d%*c", &n)!=EOF)
{
if(n==0) break;
scanf("%s", s);
get_next(n);
printf("Test case #%d\n", cnt++);
for(i=1; i<=n; i++){
len=i-next[i];//计算的循环节的长度
if(i!=len && i%len==0){
printf("%d %d\n", i, i/len);
}
}
printf("\n");
}
return 0;
}
最新文章
- Asp.Net Core 发布和部署(Linux + Jexus )
- 介绍开源的.net通信框架NetworkComms框架 源码分析
- Python赋值语句与深拷贝、浅拷贝的区别
- hadoop-MapReduce分布式计算框架
- php进制转换函数
- jdbc连接集合
- url 参数的加号变成空格处理
- 量身定制顺美男女西服、衬衫、大衣、T恤等 - 北京58同城
- Redis监控数据分布工具Redis-audit 使用总结
- 关于VS2010编译警告LNK4221
- HPU--1280 Divisible
- Django继承AbstractUser新建UserInfor Model时出现fields.E304错误
- winform中TextBox只能输入字母
- HTML5 学习01——浏览器问题、新元素
- 双目SLAM(1) 总配置
- Linux 安装Python虚拟环境,virtualenvwrapper
- LVS负载均衡模型及算法概述
- window.postMessage跨文档通信
- 517. Super Washing Machines
- 20155310 《JAVA程序设计》实验二(JAVA面向对象程序设计)实验报告