A
来源:互联网 发布:怎样快速提升淘宝心 编辑:程序博客网 时间:2024/05/29 11:41
点击打开链接
得到next的两种形式
由-1开始
void getnext(char *t, int m) { int i = 0, j = 0; next[0] = -1; j = next[i]; while(i < m) { if(j == -1 || t[i] == t[j]) { next[++i] = ++j; } else { j = next[j]; } }}由0开始
void getnext1(char *a,int n){int i=1,j=0;next1[0]=0;j=next1[i-1];while(i<n){while(j>0&&a[i]!=a[j])j=next1[j-1];if(a[i]==a[j])++j;next1[i]=j;i++;}}
Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc" and b = "def" then a*b = "abcdef". If we think of concatenation as multiplication, exponentiation by a non-negative integer is defined in the normal way: a^0 = "" (the empty string) and a^(n+1) = a*(a^n).
Each test case is a line of input representing s, a string of printable characters. The length of s will be at least 1 and will not exceed 1 million characters. A line containing a period follows the last test case.
For each s you should print the largest n such that s = a^n for some string a.
abcdaaaaababab.
143
This problem has huge input, use scanf instead of cin to avoid time limit exceed.
题解:
用KMP算法求出next数组后,找到最后一个0的位置,这个就是最短的数结束循环的位置。然后输出 l / (endd + 1) 然后就光荣的wa了。
原因是没有考虑特殊情况,例子:ABABA,输出应该是1,但是按上面的会输出2。所以我们还要判断一下 l 是否能整除 (endd + 1) ,如果不能就输出1。
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char a[1000005];int next1[1000005];void getnext1(char *a,int n){int i=1,j=0;next1[0]=0;j=next1[i-1];while(i<n){while(j>0&&a[i]!=a[j])j=next1[j-1];if(a[i]==a[j])++j;next1[i]=j;i++;}}int main(){while(1){ scanf("%s",a);if(a[0]=='.')break;int l1=strlen(a);int ans=0;getnext1(a,l1);//for(int i=0;i<l1;i++)//printf("%d ",next1[i]);//printf("\n");for(int i=l1-1;i>=0;i--){ if(next1[i]==0) { if(l1%(i+1)==0) { ans=l1/(i+1);break;}else{ans=1;break;}}}printf("%d\n",ans);}return 0;}
阅读全文
0 0
- a
- a
- a
- a
- a
- a
- a
- a
- a
- a
- a
- a
- a
- A
- A*
- a
- A
- a
- 【Maven】使用Maven构建多模块项目
- SqlServer存储过程中使用事务
- 使用face++做人脸,年龄,性别识别
- MYSQL物理结构
- poj-1061 青蛙的约会 (扩展欧几里得)
- A
- eclipse快捷键 ctrl+shift+o配置失效
- Java中反射机制(Reflection)学习
- Android NDK编译C++ 'stoi' and 'to_string' is not a member of 'std'
- BIO,NIO,AIO的区别
- DS1821 驱动程序
- CSS布局奇淫巧计之-强大的负边距
- 2017多校训练Contest4: 1009 Questionnaire hdu6075
- Java设计模式——组合模式