hdu1358 最小循环节,最大循环次数 KMP
题意:
给你一个字符串,让你找到一些字符串,这个字符串是从第一个字母开始的,并且他可以分成1个一上循环子结构够成的,比如 abcabcabc 那么当前的这个串就是三个abc构成的,他的AK值就是3,对于输出的答案中就会包含当前这个状态,表示为9 3。
思路:
就像最小路径覆盖是二分匹配的一个景点应用一样,这种循环节的也是KMP的一个应用,结论是
当 i % (i - next) == 0时,如果 i/(i - next[i]) > 1就输出 i ,i/(i-next[i]);
我对next[i]的理解是,next[i]保存的是当i匹配失败的时候,尽可能的可以不往前跑的那个坐标,也可以说找两个相同的字符串字符串,一个是以失配点前一个点为终点,另一个是以第一个点为起点,这两个串可以交叉但不可以完全相同,最长的这个串的长度的下一个就是匹配失败后可以直接匹配的点,也就是 比如1231231234 假如匹配到4的时候失配了,那么就直接退到123123的后面而不是退到起始点,这样就节省了没必要的比较。
#include<stdio.h>#define N 1000000 + 100 char str[N]; int next[N];void get_next(int m) {int j ,k;j = 0 ,k = -1;next[0] = -1;while(j < m){if(k == -1 || str[j] == str[k])next[++j] = ++k;elsek = next[k];}return ; }int main () {int n ,i ,cas = 1;while(~scanf("%d" ,&n) && n){scanf("%s" ,str);get_next(n);printf("Test case #%d\n" ,cas ++);for(i = 2 ;i <= n ;i ++){if(i % (i - next[i]))continue;int tmp = i / (i - next[i]);if(tmp > 1)printf("%d %d\n" ,i ,tmp);}printf("\n");}return 0; }
hdu1358 最小循环节,最大循环次数 KMP相关推荐
- 【POJ - 2406】Power Strings (KMP,最小循环节)
题干: Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc ...
- J. MUV LUV EXTRA (KMP求最小循环节)
原题链接 枚举后缀,KMP求每种后缀的最小循环节,更新最优解. #include <bits/stdc++.h> #define int long long using namespace ...
- 2019 CCPC秦皇岛 J 题 MUV LUV EXTRA【KMP 求最小循环节】
题意: 原题意是给出一个有理数的前一部分,求这个有理数的无限循环部分是什么.有一个值来评估猜的准确度.转换一下就成了下面的题意: 给出一个字符串s,有某一个子串,设p为该子串在s的某个后缀中的匹配长度 ...
- Problem A. MUV LUV EXTRA(kmp求最小循环节)
LINK 最小化 a ∗ p − b ∗ l a*p-b*l a∗p−b∗l 其中 p p p表示循环节总长, l l l表示循环节长度 若循环节从 i i i位置开始,那么一定需要延续到末尾 考虑固 ...
- 妙用next数组打表求最小循环节len
https://www.cnblogs.com/njczy2010/p/3930688.html https://blog.csdn.net/dominating413421391/article/d ...
- 周期(KMP找最小循环节)
Description: 一个字符串的前缀是从第一个字符开始的连续若干个字符,例如"abaab"共有5个前缀,分别是a, ab, aba, abaa, abaab. 我们希望知道一 ...
- HDU - 1358 Period(KMP的next数组求最小循环节)
题目链接:点击查看 题目大意:给出一个长度为n的字符串,问有哪些前缀是周期性字符串 题目分析:因为n给的很大,所以肯定不能暴力判断了,我们可以巧妙的利用kmp的next数组进行判断,next数组有一个 ...
- MUV LUV EXTRA(Kmp找最小循环节)
MUV LUV EXTRA [Link](Problem - J - Codeforces) 题意 给你a和b和一个小数,让你找 a × 循 环 节 出 现 到 结 尾 的 长 度 + b × 循 环 ...
- POJ - 1961 最小循环节
如果循环节存在那在前缀部分也肯定存在 如果循环节存在那至少是可以匹配的 而next是维护最大前缀的,意会意会 注意一定要先判整除,即使别的题目保证是存在循环的 特意画了一张灵魂草图帮助理解 #incl ...
最新文章
- Mon Nov 18 01:40:52 CST 2019 WARN: Establishing SSL connection without server's identity verificatio
- acf滞后数必须为正整数。_【知识点】“勾股定理”的必考点,必须掌握!
- es最新的集群选举策略
- 图形推理1000题pdf_普华永道 网申笔试 OT 含泪总结归纳 - 逻辑推理
- VHDL其他顺序语句
- 数据库系统的三级模式结构知识笔记
- 【Java】synchronized关键字笔记
- [Editor][003][Emacs] 从零到高级的进阶 - 实践开发 - emacs tutorial的使用和基本导航键
- php分页类示例下载,PHP 通用分页类的简单示例
- mysql查询的是问号_MySQL客户端查询中文显示为问号(linux) | 学步园
- 完全开源的杀病毒软件ClamAV
- 2018.08.21随笔
- 游戏筑基开发之初识指针
- 10000以内的素数。
- 小程序和Android开发,微信小程序和Android开发的对比
- Keil MDK5安装详细步骤
- 五笔:25 个一级简码(口诀)
- 网吧服务器维护工具,某某网吧专用维护工具(网吧维护管理助手)V5.1 最新版
- win10 SystemParametersInfo 设置屏保 不好使_火爆抖音的旋转时钟屏保,超酷超炫的...
- ubuntu 刷新频率 如何查看_Ubuntu Linux系统屏幕刷新率问题的解决