hdu_1358Period(kmp找循环前缀)
题目在这儿
Period
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6233 Accepted Submission(s): 3015
总结一下,如果对于next数组中的 i, 符合 i % ( i - next[i] ) == 0 && next[i] != 0 , 则说明字符串0-n-1循环,而且
循环节长度为: i - next[i]
循环次数为: i / ( i - next[i] )
如果要问为什么可以自习用几个栗子,然后啃一啃
或者看这里:
next[i]数组的含义是0-i-1个字符中前next[i]和倒数next[i]是完全相同的,那么如果next[i] < (i-1)/2 (即如果这完全相同的前缀和后缀不重合的话)那么有i-next[i]>(i-1)/2则i不可能有i%[i-next[i]]==0这种情况是不可能有循环串的,因为如果是循环串,公共的前缀和后缀肯定是重合的
1 /* 2 对next的理解更深入了点儿。 3 字符编号从0开始,那么if(i%(i-next[i])==0),注意,还要保证循环次数大于1,则i前面的 4 串为一个轮回串,其中轮回子串出现i/(i-next[i])次。 5 还要注意Next数组处理的是当前这个数的前缀,所以要处理最后一个字符就要再有面再加一位防止漏解 6 Print a blank line after each test case.注意这个pe了一次 7 */ 8 9 #include<cstdio> 10 #include<cstring> 11 #include<algorithm> 12 using namespace std; 13 const int N = 1000005; 14 char b[N]; 15 int Next[N]; 16 void get_next(int n) 17 { 18 for(int i = 0; i <= n; i++) Next[i]=0; 19 int tm; 20 tm = Next[0] = -1; 21 int j = 0; 22 while(j<n){ 23 if(tm<0||b[j]==b[tm]) { 24 Next[++j] = ++tm; 25 } 26 else tm = Next[tm]; 27 } 28 return; 29 } 30 int main() 31 { 32 int c = 1; 33 int n; 34 while(~scanf("%d",&n),n) 35 { 36 getchar(); 37 scanf("%s",b); 38 b[n] = '#'; 39 get_next(n); 40 printf("Test case #%d\n",c++); 41 for(int i = 1; i <= n; i++){ 42 int t = i - Next[i]; 43 if(i%t==0&&i/t>1){ 44 printf("%d %d\n",i,i/(i-Next[i])); 45 } 46 } 47 printf("\n"); 48 } 49 return 0; 50 }
转载于:https://www.cnblogs.com/shanyr/p/5676573.html
hdu_1358Period(kmp找循环前缀)相关推荐
- 嫦娥奔月(KMP,找循环节)及其扩展KMP
问题描述 <归妹>卦辞为:昔者恒我(姮娥)窃毋死之药于西王母,服之以(奔)月.将往,而枚占于有黄.有黄占之曰:"吉.翩翩归妹,独将西行.逢天晦芒,毋惊毋恐,后且大昌". ...
- 转载大神的~~~~~~ KMP算法的前缀next数组最通俗的解释,如果看不懂我也没辙了
KMP算法的前缀next数组最通俗的解释,如果看不懂我也没辙了 分类: 常用基础算法 IT经典笔试题 2012-09-02 10:09 1042人阅读 评论(1) 收藏 举报 算法 c 编程 ...
- OFDM中保护间隔与循环前缀抵抗ISI…
主要参考文档:OFDM移动通信技术原理与应用 目录 一.符号间干扰ISI 与 信道间干扰ICI 的概念 二.保护间隔 减少 ISI 三.循环前缀 减少 ICI 四.保护间隔与循环前缀 加入后的OFDM ...
- CP(Cyclic Prefix)循环前缀介绍
CP(Cyclic Prefix)循环前缀介绍 前言 Multipath Signal Transmission--多径信号传输 CP是如何对抗ICI和ISI的? CP长度如何确定? 每种CP支持的多 ...
- OFDM循环前缀及其作用(矩阵视角解释)
OFDM循环前缀及其作用--矩阵视角解释 读者在阅读这篇博客之前,建议先阅读和掌握我之前写的另一篇博客循环卷积和线性卷积(矩阵视角). 考虑一个时不变的宽带信号模型: y[m]=∑l=0L−1hlx[ ...
- OFDM Matlab 仿真实现(加CP(循环前缀)与基于CP的CFO(频偏)估计)
OFDM Matlab 仿真实现(加CP(循环前缀).基于CP的CFO(频偏)估计与分析.导频.LS信道估计与分析) 代码仅代表个人理解,如有错误,敬请指正 原理不做赘述,推荐这篇帖子https:// ...
- KMP算法的前缀next数组最通俗的解释,如果看不懂我也没辙了
我们在一个母字符串中查找一个子字符串有很多方法.KMP是一种最常见的改进算法,它可以在匹配过程中失配的情况下,有效地多往后面跳几个字符,加快匹配速度. 当然我们可以看到这个算法针对的是子串有对称属性, ...
- 周期(KMP找最小循环节)
Description: 一个字符串的前缀是从第一个字符开始的连续若干个字符,例如"abaab"共有5个前缀,分别是a, ab, aba, abaa, abaab. 我们希望知道一 ...
- MUV LUV EXTRA(Kmp找最小循环节)
MUV LUV EXTRA [Link](Problem - J - Codeforces) 题意 给你a和b和一个小数,让你找 a × 循 环 节 出 现 到 结 尾 的 长 度 + b × 循 环 ...
最新文章
- POS 客显 设备 显示 总价 单价 找零 收款 C# SerialPort 法
- 弹出对话框提示输入_每日一贴——如何关闭CAD的各种提示信息和对话框?
- 10000字超全Redis面试题,再也不怕被问住了!
- 磁盘分区格式FAT32与NTFS
- 南理工计算机博士 年薪_计算机专业的女博士毕业后,进入211大学当讲师,年薪曝光...
- HDU2159(完全背包)
- IdentityServer的基本概念与特性
- Maven之dependencyManagement
- FireMonkey TListView 使用 LiveBindings 绑定 TObjectList
- open-flash-chart 与 FusionCharts 开发中使用(转)
- RW Utility工具使用介绍
- Opengl ES之FBO
- 解决“error: failed to push some refs to ‘git@gitee.com:username/repo.git‘“
- utf-8的英文字母和中文汉字是一个字符占几个字节
- 如何使用netstat命令验证DDOS入侵?
- spring-boot-maven-plugin:3.0.0:repackage 报错【解决】
- 雾计算中的数据安全问题综述
- Android,ios,安卓app推送消息通知,java后台向手机推送app的通知教程
- java 求圆的面积和圆柱体的体积
- 海康威视H99 Pro 的Windows/Linux 磁盘映射
热门文章
- 自定义PopupWindow弹出后背景灰色状态
- iOS使用UIScrollView实现左右滑动UITableView和UICollectionView
- linux C++ 多线程编程
- 9.10 nohup:用户退出系统进程继续工作
- k8s 里的kv和kvs
- react 遍历对象_探索:跟随《Build your own React》实现一个简易React
- 数据湖分析如何面向对象存储OSS进行优化?
- 这个 “少年黑客”,用黑科技守护独居老人
- 【OpenKruise v0.9.0】新增 Pod 重启、删除防护等重磅功能
- E百科 | 基于MEC的边缘AI服务