题意:给定一个字符串,求他每一个前缀,如果他是周期的,求len/最短循环节。

分析:

复习一下KMP,之前有详细解析。

由于朴素匹配每次移动一位,KMP可以多移动 f[i] 位,f 就是失配函数,失配函数怎么得到,是通过模式串自己匹配自己得到。

地推 f[i+1] ,如果 i+1 失配,那么先看前一个数字,他是否适合,不适合,继续向前。

本题:

应用 f,如果字符串周期,那么 他的最短循环节 可以通过 f 得到。

f[i] : 根据定义, 前缀 和后缀的最长公共长度,那么 i - f[i] 就是最短循环节。

需要注意的是,i+1,!!!(自己体会)

 #include <cstdio>
#include <algorithm> using namespace std; const int maxn = + ;
char P[maxn];
int f[maxn]; int main()
{
int n,kase = ;
while(scanf("%d",&n),n) {
scanf("%s",P);
f[] = ;f[] = ;
for(int i=;i<n;i++) {
int j = f[i];
while(j&&P[i]!=P[j])
j = f[j];
f[i+] = (P[i] == P[j] ? j+:);
} printf("Test case #%d\n",kase++);
for(int i=;i<=n;i++) {
if(f[i]>&&i%(i-f[i])==)
printf("%d %d\n",i,i/(i-f[i]));
}
puts(""); }
return ;
}

Poj 1961 KMP的更多相关文章

  1. POJ 1961 KMP(当前重复次数)

    题意:       前缀重复次数,举个例子,aaa 2的位置2个a,3的位置3个a abcabcabc 6的位置两个abcabc,9的位置三个abcabc.... 思路:      KMP基础题目之一 ...

  2. POJ 1961 2406 (KMP,最小循环节,循环周期)

    关于KMP的最短循环节.循环周期,请戳: http://www.cnblogs.com/chenxiwenruo/p/3546457.html (KMP模板,最小循环节) POJ 2406  Powe ...

  3. KMP POJ 1961 Period

    题目传送门 /* 题意:求一个串重复出现(>1)的位置 KMP:这简直和POJ_2406没啥区别 */ /******************************************** ...

  4. Period POJ - 1961

    Period POJ - 1961 时限: 3000MS   内存: 30000KB   64位IO格式: %I64d & %I64u 提交 状态 已开启划词翻译 问题描述 For each ...

  5. POJ 1961 Period(KMP)

    http://poj.org/problem?id=1961 题意 :给你一个字符串,让你输出到第几个字符时,循环结的个数. 思路 :这个题和2409差不多,稍微修改一下,加一个循环就行了,用的也是K ...

  6. POJ 1961 Period KMP算法next数组的应用

    题目: http://poj.org/problem?id=1961 很好的题,但是不容易理解. 因为当kmp失配时,i = next[i],所以错位部分就是i - next[i],当s[0]...s ...

  7. POJ 1961 Period( KMP )*

    Period Time Limit: 3000MSMemory Limit: 30000K Total Submissions: 12089Accepted: 5656 Description For ...

  8. (简单) POJ 1961 Period,扩展KMP。

    Description For each prefix of a given string S with N characters (each character has an ASCII code ...

  9. KMP——POJ-3461 Oulipo && POJ-2752 Seek the Name, Seek the Fame && POJ-2406 Power Strings && POJ—1961 Period

    首先先讲一下KMP算法作用: KMP就是来求在给出的一串字符(我们把它放在str字符数组里面)中求另外一个比str数组短的字符数组(我们叫它为ptr)在str中的出现位置或者是次数 这个出现的次数是可 ...

随机推荐

  1. JS实现跨域请求数据--jsonp

    * { margin: 0; padding: 0; } input { width: 300px; height: 30px; border: 1px solid lightgray; margin ...

  2. oracle12C--新特性

    Orcle 12c 新特性-使用DBCA创建物理备库 >>点击这里<< Orcle 12c DG 新特性-Far Sync >>点击这里<< Orcle ...

  3. 搭架Ubuntu的 apt-cacher服务

    源服务器名称可能不太准确,意思是创建内网自己的私服,这样只要有Ubuntu通过该私服下载安装过软件,私服都会缓存,下一个Ubuntu的请求就直接从缓存中获取. 最近Ubuntu源服务器太慢了,北京的网 ...

  4. poi 多行合并

    poi做多行合并,一定需要先绘制单元格,然后写入数据,最后合并,不然各种坑啊. 合并单元格所使用的方法: sheet.addMergedRegion( CellRangeAddress  cellRa ...

  5. Maven工程红色感叹号,且工程无红叉错误

    很可能是jar包不对,可以将maven库里的jar包删除,从 http://mvnrepository.com/ 根据jar包版本号下载到本地maven库,并在pom.xml里引入jar依赖 这次ja ...

  6. 人民币金额大小写Js转换

    /** * 数字转中文 * @param dValue * @returns */ function chineseNumber(dValue) { var maxDec = 2; // 验证输入金额 ...

  7. SpringSecurity 3.2入门(1)框架介绍

    关于Spring Security Spring Security,这是一种基于Spring AOP和Servlet过滤器 [7] 的安全框架.它提供全面的安全性解决方案,同时在 Web 请求级和方法 ...

  8. artDialog组件应用学习(一)

    个人觉得artDialog是一组很不错的对话框组件.写的是artDialog_v6应用. 官方称其兼容性测试通过:IE6~IE11.Chrome.Firefox.Safari.Opera. 官网:ht ...

  9. [转]Mysql几种索引类型的区别及适用情况

    此为转载文章,仅做记录使用,方便日后查看,原文链接:https://www.cnblogs.com/yuan-shuai/p/3225417.html Mysql几种索引类型的区别及适用情况   如大 ...

  10. java基础--常用函数总结

    java基础--常用函数总结 2019-3-16-23:28:01-----云林原创 1.split()字符串分割函数 将一个字符串分割为子字符串,然后将结果作为字符串数组返回. 2.Math.flo ...