hdu 1358 Period(给定一个字符串,求有多少个前缀(包括自己本身),它是由k(k>2,并且尽量大)个循环节组成的)
来源:互联网 发布:淘宝详情图片大小 编辑:程序博客网 时间:2024/05/19 22:00
代码:
#include<cstdio>#include<cstring>using namespace std;int LCPS[1000005];int next[1000005];char s[1000005];int n;void GetLCPS(){ int j=0; int k=-1; next[0]=-1; while(j<n) { if(k==-1||s[k]==s[j]) { LCPS[j++]=++k; next[j]=k; } else { if(k-1>=0) k=LCPS[k-1]; else k=-1; } }}int main(){ int cnt=0; while(scanf("%d",&n)&&n) { printf("Test case #%d\n",++cnt); scanf("%s",s); GetLCPS(); for(int i=1;i<n;i++) { int cir=(i+1)-(next[i+1]); int r=(i+1)%cir; int k=(i+1)/cir; if(r==0&&k>1) { printf("%d %d\n",i+1,k); } } printf("\n"); } return 0;}
0 0
- hdu 1358 Period(给定一个字符串,求有多少个前缀(包括自己本身),它是由k(k>2,并且尽量大)个循环节组成的)
- hdu 3746 Cyclic Nacklace(求最少添加几个字符使得字符串是由n(n>=2)个循环节组成的)
- 给定K个整数,找出由这K个整数组成的最小的数字
- hdu 5289 Assignment(给一个数组,求有多少个区间,满足区间内的最大值和最小值之差小于k)
- HDU 1358 Period(KMP求前缀子串的循环次数)
- 【HDU 5944】【暴力】Fxx and string 【给定一个字符串s,求有多少个三元组(i,j,k)满足i,j,k是等比数列且s[i]=='y'&&s[j]=='r'&&s[k]=='x'】
- 一个只由字母数字字符和破折号组成的字符串S. 该字符串被N个破折号分成N + 1个组。 给定数字K,使得每个组包含完全K个字符,除了第一个组可能少于K
- 使用优先级队列求一个大数组中的前k个最大的数(或前k个最小的数)
- 01背包(求前一个的最大价值-->求前K个的最大价值) 之 hdu 2639
- hdoj String 5672 (字符串模拟)求至少有k个不重复的字符的子串个数
- HDU 6058 维护最近k个比本身大的数
- hdu 5671 String(求有多少个子串,包含有至少k(1≤k≤26)个不同的字母)
- HDU-2639(01背包+求第k个最大值)
- 随机从屏幕上输入一个字符串,看里面有多少个奇数,偶数。并且求各位的和
- 面试题: 求N个数中前k个大的数(大数据)
- 线段树离线处理(区间内出现k次的数有多少个)Codeforces Round #136 (Div. 2)
- 求字符串中由连续的相同字符组成的最长子串(如果有两个及两个以上的最长子串,则输出第二个)
- Hdu 5314 Happy King(求树上多少个点对(u,v)满足u到v的路径上点权值最大值减最小值不大于给定的K)
- 埃博拉病毒的实验室症断
- 无线调试——不需要root也能wifi调式
- HDU 3879 Base Station(最小割的最大权闭包 最大获利)经典
- My C++ Study Notes
- Function构造函数
- hdu 1358 Period(给定一个字符串,求有多少个前缀(包括自己本身),它是由k(k>2,并且尽量大)个循环节组成的)
- 语义化版本2.0.0
- 南邮 OJ 1096 组合数
- 1072:字母排列
- 小点滴——xmind思维导图软件简单操作
- [CasperJS] 安装
- 对象的强、软、弱和虚引用
- IllegalMonitorStateException异常原因及解决办法
- android 开发小贴士3