poj 1961 Period

POJ - 1961:Period Period 来源:POJ 标签: 参考资料: 相似题目: 题目 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 peri... 阅读详情

Period
Time Limit: 3000MS Memory Limit: 30000K
Total Submissions: 13768 Accepted: 6510

Description

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 AK ,that is A concatenated K times, for some string A. Of course, we also want to know the period K.

Input

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.

Output

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.

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

题目大意:每个测试给定一个字符串,若前i几个字符组成的字符串是周期串,输出i及其周期长度。

 

解题思路:利用kmp算法的next数组,未改进的next数组表示相同前缀后缀的长度,(i-next[i])可以看以周期,

若有i%(i-next[i])=0,则表示长度为i的该字符串是周期串。


代码如下:

#include <cstdio>
#include <cstring>
const int maxn=1000010;
int a[maxn];
int next[maxn];
int n;
void get_next()
{
    int i=1,j=0;
    next[1]=0;
    while(i<=n)
    {
        if(j==0||a[i]==a[j])
        {
            i++;
            j++;
            next[i]=j;
			if(i%(i-next[i])==0&&a[i]==a[next[i]])
				printf("%d %d\n",i,i/(i-next[i]));	
        }
        else
            j=next[j];
    }
	return ;
}
int main()
{
    int t=0,i;
	char s;
    while(scanf("%d",&n)!=EOF&&n)
    {
        t++;
		memset(next,0,sizeof(next));
		getchar();
		for(i=1;i<=n;i++)
		{
			scanf("%c",&s);
			a[i]=s-'0';
		}
		printf("Test case #%d\n", t);
        get_next();
		printf("\n");
    }
    return 0;
}


[poj 1961]Period[kmp] Period Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 16202   Accepted: 7764 Description For each prefix of a given string S with N characters (each charact 阅读详情

相关推荐

从SRIOV到SIOV:PCIe虚拟化技术下一代革命

如果说SR-IOV是过去十年PCIe虚拟化的“标杆方案”,那SIOV就是为超大规模云数据中心、AI集群量身打造的“破局者”——它解决了SR-IOV难以逾越的扩展性瓶颈,同时平衡了性能、成本与生态兼容性。今天就从“为什么需要SIOV”到“SIOV到底强在哪”,再到“未来要解决什么问题”,做一次全方位深度拆解。

存储随笔 2552

POJ—1961 Period

POJ—1961 Period #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;iostream&gt; using namespace std; int next[1000005]; int n; void Next(char T[]) { int i=0,j=-1; next[0]=-1; while(i&lt;n) ...

wanglin007 228

使用PackStack工具自动化部署OpenStack

搭建 OpenStack 环境,每个组件的安装和配置都需要熟悉其特定的依赖关系、参数设置等,对于初学者来说容易出错。PackStack 工具通过集成一系列脚本和配置文件,便于快速搭建OpenStack练习环境。CPU:支持 Intel VT - x 或 AMD - V 硬件虚拟化技术,并且要在 BIOS 里开启此功能。内存:16GB以上存储:200GB以上可用空间(2)VMware WorkStation16.0以上版本(3)远程连接工具(如Xshell、MobaXterm)

2301_80440447的博客 4094

【POJ1961】period

[POJ1961]period 题目描述 如果一个字符串S是由一个字符串T重复K次构成的,则称T是S的循环元。使K出现最大的字符串T称为S的最小循环元,此时的K称为最大循环次数。 现在给定一个长度为N的字符串S,对S的每一个前缀S[1~i],如果它的最大循环次数大于1,则输出该循环的最小循环元长度和最大循环次数。 输入 多组数据,每个数据包括两行。第一行为字符串大小N,第二行包括字符串。...

weixin_33881753的博客 187

【3D计算机视觉】从PointNet到PointNet++理论及pytorch代码

从PointNet到PointNet++理论及代码详解1. 点云是什么1.1 三维数据的表现形式1.2 为什么使用点云1.3 点云上以往的相关工作2. PointNet2.1 基于点云的置换不变性2.1.1 由对称函数到PointNet(vanilla)2.1.2 理论证明2.2 基于点云的旋转不变性2.3 网络总体结构2.4 实验结果和网络的鲁棒性2.5 代码解析3. PointNet++3.1...

小执着的博客 8万+

WhatsApp注册流程逆向分析:从协议解析到风控对抗实战

移动应用安全分析的核心在于理解客户端与服务端的交互协议与验证机制。通过逆向工程,可以深入剖析应用的数据加密、传输与身份验证原理,这对于构建安全模型、进行自动化测试和风控策略研究具有重要技术价值。在即时通讯、金融支付等高安全要求场景中,掌握应用注册流程的底层实现是评估其安全性的关键。本文聚焦于使用动态分析工具如Frida进行Hook和流量抓包,结合设备指纹识别与模拟器检测技术,详细解析了大型应用的注册风控体系,为安全研究人员和开发者提供了从环境搭建到实战对抗的完整方法。

weixin_33935636的博客 315

kmp杂题2 poj1961Period

poj1961 Period 题意: 给一个字符串,如果在前 i 位置处满足连续循环A^K(A:单位循环段,K:循环个数),则输出i和K(仅输出K>1的情况,按i的递增顺序)是不是和上一题(poj2406) 有点像? (不懂得童鞋可以看一看…顺便刷刷访问量哈哈) 像上一题那样把自己匹配一遍然后再lenb过一次就可以惹 是不是很简单?

kkkGIGi_qtt 266

振动分析中相位的确定

更是定位不平衡量角度的关键。是确定振动信号与转子旋转位置之间时间关系的核心步骤,而。以内,以确保校正配重安装角度的有效性。在实际动平衡中,相位角的误差需控制在。在振动分析和动平衡中,

轩辕霸天L 2733

KMP POJ1961 Period

POJ1961 Period 题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=10934 题意:给一个字符串,起点固定,终点从前往后遍历,输出存在以“某一前缀为周期串的原始串”的结点位置和根据前缀得到的周期。 思路:递推的思想,具体用KMP实现,照着大白书打的。注意个人使用的KMP是next表示长度,而遍历字符

beihai2013 421

Colab虚拟环境配置全攻略:从安装到实战应用

本文详细介绍了在Google Colab中配置Python虚拟环境的完整流程与实战技巧。通过安装Anaconda、创建独立环境、解决常见错误及结合深度学习项目应用,帮助用户有效管理依赖、避免冲突,并利用环境持久化策略提升在Colab中的开发效率与项目可复现性。

weixin_29204121的博客 339

软考高级网络规划设计师教程(第3版)

"本书是由工业和信息化部教育与考试中心组织编写的考试用书,依据《网络规划设计师考试大纲》(2026年审定通过)编写。本书分为两篇:第一篇为网络规划与设计综合知识,其中第1章介绍计算机网络基础知识,第2章介绍网络互连与互联网,第3章介绍网络规划与设计的知识和方法,第4章介绍网络资源设备,第5章介绍网络安全技术,第6章介绍标准化和网络安全法规;第二篇为案例实践,其中第7章介绍网络规划案例,第8章介绍网络故障分析与处理案例,第9章介绍网络安全部署案例,第10章介绍网络规划与设计论文写作的指导思想和写作技巧。

鹿鸣天涯 3932

poj 1961 Period (kmp next 数组的应用)

http://poj.org/problem?id=1961 Period Time Limit:3000MS Memory Limit:30000K Total Submissions:10855 Accepted:4995 Description For each prefix of a given strin...

diansitao5461的博客 144

芒果YOLO11改进44:主干Backbone篇之MobileViT::结合最新 ICLR2022 顶会|轻量通用的MobileViT结构(一)Transformer,轻量级、通用且移动友好的视觉转换

MobileViT::结合最新 ICLR2022 顶会|轻量通用的MobileViT结构(一)Transformer,轻量级、通用且移动友好的视觉转换

包括YOLOv5、YOLOv7、YOLOv8等模型改进 369

poj 1961 Period(未优化KMP的next数组)

poj 1961 Period(未优化KMP的next数组)

PKU_ZZY的博客 774

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【POJ 1961】Period(KMP求循环节)

【POJ 1961】Period(KMP求循环节) Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 15466   Accepted: 7417 Description For each prefix of a given string S with N cha

ACMer' 1083

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

POJ-1961(Period)(kmp())

POJ-1961(Period)(kmp()) Description 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

hpulw 1050

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Poj 1961 Period

题面 http://poj.org/problem?id=1961 题解 发现一个性质 一个循环的串 假设循环节长度为L 那么我们取其前size-L位,后size-L位,这两个串相同 相对应的,如果一个长度为size的串,我们取前k位,和后k位相同 那么size-k一定是这个串的循环节 所以我们只要对于每一位 找到前i位的子串的最长的前缀与对应长度的后缀相同的长度 那么i-le...

aozhuan8489的博客 171

POJ - 1961 Period

https://vjudge.net/problem/POJ-1961 POJ - 1961 Period题目分析AC代码 题目 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 e

斯文~ 267

POJ 1961 Period

Period Time Limit: 3000MS Memory Limit: 30000K Description 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 whet...

忘梦心的博客 407

【题解】PERIOD - Period [POJ1961] [SP263]

【题解】PERIOD - Period [POJ1961] [SP263] 在进入这道题之前,我们需要了解 kmp 算法 不知道的童鞋可以去看一下Silent_EAG(一个可爱的女孩纸)的讲解。 关于 kmp 算法中 next 数组的周期性质 引理: 对于某一字符串 \(S[1\)~\(i ]\),在它众多的\(next[ i ]\)的“候选项”中,如果存在某一个\(next[ i ...

weixin_30840573的博客 212

POJ-1961 Period

题目链接:http://poj.org/problem?id=1961 题目大意: 给你一个字符串,求这个字符串到第i个字符为止的循环节的次数。 比如aabaabaabaab,长度为12.到第二个a时,a出现2次,输出2.到第二个b时,aab出现了2次,输出2.到第三个b时,aab出现3次,输出3.到第四个b时,aab出现4次,输出4. 解题思路: 这道题好像就是POJ 2406

飘过的小牛 7003

POJ1961Period

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 <

雪霜贸贸,荠麦之茂 411

poj1961 Period

KMP

AaronPolaris 1405
上一篇: POJ 3258 River Hopscotch
下一篇: poj 2406 Power Strings
雨狮子
博客等级 码龄12年 24粉丝 185原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值