【KMP】 poj1961 Period

[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 阅读详情

Period

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 A K ,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

题目:给定字符串S,求其前n位重复的次数。比如aabaabaabaab,前2位是aa,a重复了2次,前6位是aabaab,aab重复了2次,前9位是aabaabaab,aab重复了3次,前12位是aabaabaabaab,aab重复了4次。

所以输出的结果就是

2 2
6 2
9 3
12 4

题解:通过KMP求循环节长度,然后枚举每个点判断。


#include<cstdio>
#include<cstring>
using namespace std;
char s[1000005];
int next[1000005];
void get_next()
{
    int i=0,j=-1;
    next[0]=-1;
    for(;s[i];)
        if(j==-1||s[i]==s[j])
        {
            ++i;
            ++j;
            next[i]=j;
        }
        else
           j=next[j];
}
int main()
{
    int t,n;
    for(int cas=1;scanf("%d",&n),n;++cas)
    {
        scanf("%s",s);
        get_next();
        printf("Test case #%d\n",cas);
        for(int i=1;i<=n;++i)
            if(i%(i-next[i])==0)
               if(i/(i-next[i])>1)
                  printf("%d %d\n",i,i/(i-next[i]));
        printf("\n");
    }
    return 0;
}



手把手教你用U盘制作Win11启动盘:从PE工具到系统安装全流程 本文提供了一份详尽的Windows 11启动盘制作与系统安装全流程指南。从选择合适的U盘和PE工具开始,重点讲解了如何正确制作包含EFI引导分区的启动盘,并详细演示了在PE环境下进行GPT分区、使用CGI工具安装系统镜像,以及首次启动后的关键设置步骤,帮助用户轻松完成从零到一的系统安装。 阅读详情

相关推荐

ROS小车定位实战:如何用rf2o_laser_odometry和robot_localization实现精准里程计(附避坑指南)

本文详细介绍了如何利用rf2o_laser_odometry和robot_localization在ROS中实现高精度小车定位。通过激光里程计与状态估计的黄金组合,解决室内移动机器人的定位难题,包括环境搭建、算法配置、多传感器融合策略及实战避坑指南,帮助开发者快速部署稳定可靠的定位系统。

weixin_29081703的博客 287

【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

告别理论!手把手教你用Patran/Nastran搞定悬臂翼的颤振分析(附完整模型文件)

本文提供了一份详细的Patran/Nastran悬臂翼颤振分析实战指南,涵盖从几何建模到结果解读的全过程。通过手把手教学和完整模型文件,帮助工程师和学生快速掌握气动弹性分析技术,特别适合需要实际操作的初学者。文章重点介绍了模态分析、气动建模和颤振求解等关键步骤,并提供了常见问题排查和优化建议。

weixin_30879169的博客 493

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

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

PKU_ZZY的博客 774

vue使用 APlayer+Meting实现音乐播放,支持多平台音乐:网易云、腾讯、虾米、酷狗、百度

  我之前写过一篇博客:使用 APlayer 实现音乐播放器,虽然 APlayer 让我实现了想要的音乐播放器效果,但是音频列表 audio 的音频链接、音频封面、歌词等,是需要自己去补充的。   那么这些数据从哪里来呢?   我昨天有发愁一会儿会儿,也去搜了获取音乐列表的接口,可以发请求去获取数据嘛。   也有瞅见MetingJS,A powerful plugin connect APlayer and Meting,一个连接APlayer和Meting的功能强大的插件,附上GitHub地址:https

小R.的博客 4798

win11本地部署openclaw实操第5集-X11图形化界面搭建,让WSL2“看见”世界

本文介绍了在WSL2中实现图形界面(GUI)的方法。由于WSL2默认没有图形界面,需要使用X11服务器作为"翻译显示器",将Linux程序的图形指令渲染到Windows窗口中。推荐使用VcXsrv作为X11服务器,详细说明了其安装和配置步骤,包括选择"One large window"显示模式、禁用访问控制等关键设置。随后在Ubuntu中安装轻量级xfce4桌面环境,并通过设置DISPLAY环境变量将图形输出指向VcXsrv。最终通过startxfce4命令成功在Vc

weixin_44626085的博客 811

KMP POJ1961 Period

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

beihai2013 421

Arduino、ESP32驱动SFA40甲醛传感器(气体传感器篇)

SFA40甲醛传感器是一款基于盛思锐电化学原理的专业HCHO检测模块,具备卓越的抗酒精干扰能力(乙醇交叉敏感度<0.3%)、高达±20ppb的检测精度及0~1000ppb的宽量程。该传感器内置SHT4X温湿度传感器进行自动补偿,确保数据的长期稳定性;其小尺寸、低功耗的特性,可快速集成至智能家居、空气净化器、物联网环境监测等系统中,实现对甲醛浓度的精准、可靠监测。

不脱发的程序猿 306

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

18、项目运行与调试全攻略

本文详细介绍了在IntelliJ IDEA中进行项目运行与调试的完整流程,涵盖运行配置的创建与管理、临时配置的使用与保存、运行窗口的控制台操作及多程序并行运行的处理。同时,讲解了如何通过调试器定位和修复语法错误、运行时错误及逻辑错误,并结合ACME项目演示了第三方库Log4J的集成方法和命令行客户端的功能改进。文章还提供了调试流程图,帮助开发者系统掌握IDEA的强大调试功能,提升开发效率与代码质量。

svm4gardener的博客 76

广义正态分布优化算法(GNDO)详解:从理论到实践

广义正态分布优化算法(GNDO)是一种基于正态分布理论的新型元启发式优化算法。该算法通过局部开发和全局探索两种策略平衡搜索过程:局部开发利用广义平均位置和标准差进行精细搜索,而全局探索通过随机个体信息共享扩大搜索范围。GNDO具有参数少、结构简单、收敛速度快等优点,在光伏模型参数提取等工程优化问题中表现优异。算法将种群位置更新与正态分布参数调整相联系,通过自适应机制平衡探索与开发,数学分析表明其具有全局收敛性。相比传统优化算法,GNDO在探索能力和开发能力上均有优势,是高维复杂优化问题的有效解决方案。

qq_42212808的博客 139

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的博客 145

实战优化!C#上位机串口通信卡顿问题:超时机制+数据缓存方案

串口名</param>/// <param name="baudRate">波特率

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1065

POJ1961 Period KMP

题目链接 http://poj.org/problem?id=1961 分析 KMP算法中定义了 fail[i]fail[i]fail[i] 数组来记录对于每个 iii,满足 j&lt;ij &lt; ij<i 且 s[1...j]=s[i−j+1,i]s[1 ... j] = s[i - j + 1, i]s[1...j]=s[i−j+1,i] 的最大的 jjj。 前缀 i...

Kevin的博客 304

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

poj 1961 Period(KMP)

题目链接:http://poj.org/problem?id=1961 #include #include char S[1000010]; int next[1000010]; int main() { int n,time = 1; int i,j,length; while(scanf("%d",&n) && n) { i = 0;

梦幻的蔷薇色 339

WINCC7.3破解文件

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

KMP POJ 1961 Period

题目传送门 1 /* 2 题意:求一个串重复出现(>1)的位置 3 KMP:这简直和POJ_2406没啥区别 4 */ 5 /************************************************ 6 * Author :Running_Time 7 * Created Time :20...

weixin_30508309的博客 73

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

POJ 1961-Period:KMP

点击打开链接 Period Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 11163   Accepted: 5162 Description For each prefix of a given string S with N characters

云淡风清 749

kmp杂题2 poj1961Period

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

kkkGIGi_qtt 266

poj1961 Period(KMP)

C - Period Crawling in process... Crawling failed Time Limit:3000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 1961 Appoint description:

苏苏爱自由 5378

poj 1961 Period(KMP)

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. #inc

1127

【POJ 1961】Period【KMP】

题目大意: 题目链接:http://poj.org/problem?id=1961 求一个字符串的所有前缀是否为一个串重复得到而成。如果是,输出这个前缀的位置和那个串的长度。 思路: 我们知道KMP的nextnextnext数组可以求出一个子串的前缀和后缀的最长相同部分,由于是最大的前缀=后缀,那么将iii(子串长度)减去next[i]next[i]next[i],就又得到了一个前缀=...

stoorz 190

POJ 1961 Period(KMP)

题目链接:http://poj.org/problem?id=1961 题意:给定长度为n的字符串S,求其前i位重复的次数K。 思路:求出next[]数组(字符串下标从0开始)。然后从2开始枚举到len,如果X%(X-next[X])==0且X/(X-next[X])&gt;1,则前X个满足题意,循环次数为X/(X-next[X])。 证明:有一点很明显,如果X能整除X-next[X],那么...

weixin_34234829的博客 164

POJ1961 Period (kmp) 题解

Period Time Limit:3000MS Memory Limit:30000K Total Submissions:16462 Accepted:7903 Description For each prefix of a given string S with N characters (each char...

176

|poj 1961|KMP|Period

poj传送门/* poj 1961 教训: 1、kmp求循环节是n-f[n] */ #include<cstdio> #include<cstring> #include<algorithm> #include<vector> using namespace std; #define ms(i,j) memset(i, j, sizeof i);const int MAXN

博客停更,请到"再见,优快云"文章中找新博客地址 689
上一篇: 【KMP】 hdu3746 Cyclic Nacklace
下一篇: 【KMP】 poj2752 Seek the Name, Seek the Fame
ACM_Ted
博客等级 码龄15年 122粉丝 208原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值