Period

POJ - 1961
时限: 3000MS   内存: 30000KB   64位IO格式: %I64d & %I64u

提交 状态

已开启划词翻译

问题描述

For each prefix of a given string S with N characters (each character has an ASCII code between 97 and 126, inclusive), we want to know whether the prefix is a periodic string. That is, for each i (2 <= i <= N) we want to know the largest K > 1 (if there is one) such that the prefix of S with length i can be written as A K ,that is A concatenated K times, for some string A. Of course, we also want to know the period K.

输入

The input consists of several test cases. Each test case consists of two lines. The first one contains N (2 <= N <= 1 000 000) – the size of the string S.The second line contains the string S. The input file ends with a line, having the 
number zero on it.

输出

For each test case, output "Test case #" and the consecutive test case number on a single line; then, for each prefix with length i that has a period K > 1, output the prefix size i and the period K separated by a single space; the prefix sizes must be in increasing order. Print a blank line after each test case.

样例输入

3
aaa
12
aabaabaabaab
0

样例输出

Test case #1
2 2
3 3 Test case #2
2 2
6 2
9 3
12 4

来源

题意:一个字符串的前缀,可以由其最小的循环节循环k(k>1, 次得到。按升序输出这样的前缀的长度。
 #include <iostream>
#include <cstdio>
#include <cstring> using namespace std; #define maxn 1000008 char s[maxn];
int next[maxn]; void getNext()
{
int j, k, i;
i = strlen(s); j = ;
k = -;
next[] = -;
while(j < i)
{
if(k == - || s[j] == s[k])
{
j++;
k++;
next[j] = k;
}
else
k = next[k];
}
} int main()
{
int q, p = ;
while(scanf("%d", &q), q)
{
scanf("%s", s); memset(next, , sizeof(next));
getNext(); printf("Test case #%d\n", p++); for(int i = ; i <= q; i++)
{
int k = next[i]; // 这个前缀的,前缀和后缀最长的相等长度
if(i % (i - k) == && i / (i - k) != ) // 满足循环节……循环 输出
printf("%d %d\n", i, i / (i - k));
}
puts("");
}
return ;
}

最新文章

  1. weui 图片弹框
  2. sacc scss less
  3. android: adapter getView(position==0) was invoked many times.
  4. Nginx基础知识之————多模块(非覆盖安装、RTMP在线人数实例安装测试)
  5. iOS 深入Objective-C的动态特性
  6. Unity3D题目,Unity中利用GUI输出九九乘法表
  7. UVA 465 (13.08.02)
  8. Asteroids(二分图最大匹配模板题)
  9. 逆向并查集 hrbust 1913
  10. API测试自动化——基于CDIF的SOA基本功能(实例篇)
  11. mysql:ip地址连接
  12. saltstack常用命令
  13. Java六大必须理解的问题
  14. BSS, DATA, TEXT, HEAP, STACK
  15. HDU2066(SPFA+前向星)
  16. Python学习笔记 --第二章
  17. Java多线程-----volatile关键字详解
  18. (转)oms系统安装php的redis扩展
  19. jsp 简单标签开发
  20. java随机数组

热门文章

  1. Oracle数据库文件导出为CSV格式的方法
  2. laravel使用artisan报错SQLSTATE[42S02]: Base table or view not found: 1146
  3. 应用安全-安全设备-Waf系列-软Waf-云锁
  4. HIbernate入门3
  5. [Python3 填坑] 001 格式化符号 &amp; 格式化操作符的辅助指令
  6. Java初始化块及执行顺序
  7. java类从加载、连接到初始化过程
  8. [AGC035F]Two Histograms
  9. 知乎使用selenium反爬虫的解决方案
  10. Codeforces - 1198D - Rectangle Painting 1 - dp