例题3.13 周期 LA3026

1.题目描述:点击打开链接

2.解题思路:本题利用KMP算法中失配函数的性质解决。我们仔细观察失配函数f就会发现,如果一个字符串P是一个周期串,且它的最后一个位置是i,那么i-f[i]一定是该周期串的一个最小的循环节的长度,这样,最大的k值就是i/(i-f[i])。这样,我们只需要寻找f[i]>0(因为k>0,因此不能让i-f[i]==i)且i%(i-f[i])==0的位置即可。

3.代码:

#include<iostream>
#include<algorithm>
#include<cassert>
#include<string>
#include<sstream>
#include<set>
#include<bitset>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#include<deque>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<cctype>
#include<functional>
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;

#define me(s)  memset(s,0,sizeof(s))
#define rep(i,n) for(int i=0;i<(n);i++)
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
//typedef pair <int, int> P;

const int N=1000000+10;
char P[N];
int f[N];

int main()
{
    int n,kase=0;
    while(scanf("%d",&n)==1&&n)
    {
        scanf("%s",P);
        f[0]=f[1]=0;
        for(int i=1;i<n;i++)
        {
            int j=f[i];
            while(j&&P[i]!=P[j])j=f[j];
            f[i+1]=P[i]==P[j]?j+1:0;
        }
        printf("Test case #%d\n",++kase);
        for(int i=2;i<=n;i++)
            if(f[i]>0&&i%(i-f[i])==0) //注意要让f[i]>0
            printf("%d %d\n",i,i/(i-f[i]));
        puts("");
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-05 06:54:13

例题3.13 周期 LA3026的相关文章

《算法竞赛入门经典》5.13周期串

1 /* 2 *如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期.例如,abcabcabcabc以3为周期(注意,它也以6和12为周期). 3 *输入一个长度不超过80的串,输出它的最小周期. 4 *样例输入:HoHoHo 5 *样例输出:2 6 */ 7 #include <stdio.h> 8 #include <string.h> 9 10 //枚举法 11 int main() 12 { 13 char word[100]; 14 scanf(&q

武汉科技大学ACM :1007: 华科版C语言程序设计教程(第二版)例题4.13

Problem Description 输入两个整数,求他们的最大公约数和最小公倍数. Input 两个整数. Output 最大公约数和最小公倍数. Sample Input 12 9 Sample Output 3 36 HINT 可以把求最小公约数和最小公倍数写成函数,方便以后调用. 1 #include <stdio.h> 2 3 void main() 4 5 { 6 7 int m,n; 8 9 while(scanf("%d%d",&m,&n)

什么是指令周期?什么是机器周期?什么是时钟周期?三者之间的关系如何?

指令周期 :取出并执行一条指令的时间. 机器周期 :又称CPU周期,CPU访问一次内存所花的时间较长,因此用从内存读取一条指令字的最短时间来定义. 时钟周期: 通常称为节拍脉冲或T周期.处理操作的最基本单位,即CPU主频. 三者的关系:指令周期通常用若干个机器周期表示,而机器周期又包含若干个时钟周期. 例题:CPU周期也称为机器周期,一般是从内存中(A)的最短时间. A.读一个指令 B.写一个指令 C.读写一个指令 D.执行一个指令

python 各模块

01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 语言支持模块 12 _ _builtin_ _ 模块 121 使用元组或字典中的参数调用函数 1211 Example 1-1 使用 apply 函数 1212 Example 1-2 使用 apply 函数传递关键字参数 1213 Example 1-3 使用 apply 函数调用基类的构造函数 122

转:Python标准库(非常经典的各种模块介绍)

Python Standard Library 翻译: Python 江湖群 10/06/07 20:10:08 编译 0.1. 关于本书 0.2. 代码约定 0.3. 关于例子 0.4. 如何联系我们 核心模块 1.1. 介绍 1.2. _ _builtin_ _ 模块 1.3. exceptions 模块 1.4. os 模块 1.5. os.path 模块 1.6. stat 模块 1.7. string 模块 1.8. re 模块 1.9. math 模块 1.10. cmath 模块

阅读《构建之法》第13~17章及读《一个程序员的生命周期》感想

第十三章: 对于这章的测试,我们只是简单提了一下单元测试,其他测试都没有,这章相对来说,几乎为零,看了也不知道怎么做. 问题就更别说了,等周末有时间在回头看看,再更新补上问题. 第十四章: <一个程序员的生命周期>感想 一口气从第一篇的:从大山里走出的程序猿看到最后一篇:7年工作感悟,  很感谢他给我们分享他的经历,在一些方面看法也和作者有共鸣. 然而每个时代都并不容易,80后悲催,90后,00后都悲催,每个时代都有不同的困难,不只是单单只有一代人困难,有的人会自暴自弃,有 的人会迎刃而上,有

quick-cocos2d-x游戏开发【13】——节点生命周期事件,帧事件等其他事件

在前面已经学过了"触摸事件","触摸捕获事件","按键事件",此外,quick还有其他几个事件,前面已经列过有这些, 预定义的节点事件: cc.NODE_EVENT - enter, exit 等事件 cc.NODE_ENTER_FRAME_EVENT - 帧事件 cc.NODE_TOUCH_EVENT - 触摸事件 cc.NODE_TOUCH_CAPTURE_EVENT - 捕获触摸事件 预定义的层事件: cc.ACCELERATE_EVENT

连载《一个程序猿的生命周期》-13.恋爱七年,一日转正

在 < 开始懵懂的恋情>中大概介绍了我们恋爱的情况,抗日战争才8年,我们就恋了7年,期间的故事犹如爱情小说一样,当自己老了的时候像演电影一样一幕幕在眼前 划过,当你看到多少世间悲情的时候,才知道自己经历过的恋爱却像蜜糖一样在嘴中永远无法完全融化. 2009年正在实施项目的时候,当时的身体状况不是很好,心境极差,脾气还不是太好,在<在项目中忍受病魔的折磨>已经详细介绍了.利用出差回京期间去 领的结婚证,也没看个良辰吉日,工作很紧张,一切都很仓促.领证的路上还小吵了一次,忘了具体原因.

13、UIViewController生命周期

UIViewController中loadView, viewDidLoad, viewWillUnload, viewDidUnload, viewWillAppear, viewDidAppear, viewWillLayoutSubviews,viewDidLayoutSubviews,viewWillDisappear, viewDidDisappear方法,按照调用顺序说明如下: 1. initWithNibName:bundle: 如果是通过调用initWithNibName:bun