题意:给定一个字符串,求他每一个前缀,如果他是周期的,求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 反转字符串的实现

    在这里只推荐简单易懂的方法,赶紧get !!! 字符串转数组,反转数组,数组转字符串. split(""):根据空字符串拆分数组 reverse():数组反转元素位置 join(& ...

  2. elastic 集群安装

    Elastic Search 安装和配置 1.下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6. ...

  3. 对象池3(方法功能)PoolManager(控制)PoolTimeObject(时间管理)text01(调用)Destorys(销毁)

    1.对象池PoolManager namespace kernal { public class PoolManager : MonoBehaviour { //“缓冲池”集合 public stat ...

  4. 微博关系服务与Redis的故事

    http://www.infoq.com/cn/articles/weibo-relation-service-with-redis?utm_source=articles_about_Redis&a ...

  5. Oracle 角色及其权限

    一.简介 Oracle权限分为系统权限和对象权限. 1.系统权限 注意:系统权限不支持级联回收,所以你需要使用sysdba一个个的回收. 2.对象权限 注:对象权限支持级联回收,系统权限不支持级联回收 ...

  6. 关于TypeScript中null,undefined的使用

    TypeScript本质是javascript,因此基本上js所有的功能在ts上完全可以照搬照抄过来使用.根据ts的文档,有些我觉得值得商榷的——比如null,undefined就是例子. 文档上说一 ...

  7. BNU29064——硬币水题II——————【事件概率】

    硬币水题II Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java class name: ...

  8. small zhishi

    \\192.168.1.201\d$\Data 访问远程计算机文件资源管理器

  9. c# 文件名排序

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.C ...

  10. OGNL,表达式上下文ContextMap

    1.OGNL表达式 object graph navigation language:对象图导航语言 存取对象属性:调用对象方法:字段类型转换等. <input type="text& ...