hdu 1358 Period
2015-10-12 14:19
281 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1358
题目大意:解释一下输出数据,
第一组:
2 2 表示的是第一个字母到第二字母,a出现了两次。
3 3 表示的是第一个字母到第三个字母,a出现了3次。
第二组:
2 2表示的是第一个字母到第二个字母,a出现了两次。
6 2表示的是第一个字母到第六个字母,aab出现了两次。
9 3表示的是第一个字母到第九个字母,aab出现了三次。
12 4表示的是第一个字母到第十二个字母,aab出现了四次。
题目大意:解释一下输出数据,
第一组:
2 2 表示的是第一个字母到第二字母,a出现了两次。
3 3 表示的是第一个字母到第三个字母,a出现了3次。
第二组:
2 2表示的是第一个字母到第二个字母,a出现了两次。
6 2表示的是第一个字母到第六个字母,aab出现了两次。
9 3表示的是第一个字母到第九个字母,aab出现了三次。
12 4表示的是第一个字母到第十二个字母,aab出现了四次。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 5 using namespace std; 6 7 int next[1000010]; 8 char str[1000010]; 9 10 void get_next() 11 { 12 int i=0,j=-1; 13 next[0]=-1; 14 int lens=strlen(str); 15 while (i<lens) 16 { 17 if (j==-1||str[i]==str[j]) 18 { 19 i++; 20 j++; 21 next[i]=j; 22 if (i>=2&&j>=1) 23 { 24 if (i%(i-next[i])==0) 25 { 26 int k=i/(i-next[i]); 27 printf ("%d %d\n",i,k); 28 } 29 } 30 } 31 else 32 j=next[j]; 33 } 34 } 35 int main () 36 { 37 int n,flag=1; 38 while (scanf("%d",&n),n) 39 { 40 getchar(); 41 scanf("%s",str); 42 printf ("Test case #%d\n",flag++); 43 get_next(); 44 printf ("\n"); 45 //lens=strlen(str); 46 } 47 return 0; 48 }
相关文章推荐
- hdu 2817 A sequence of numbers(快速幂取余)
- hdu 2899 Strange fuction (二分)
- hdu 2141 Can you find it?(二分查找)
- hdu 1061 Rightmost Digit
- poj 1363 Rails
- hdu 1237 简单计算器
- 17.1.2.1 Advantages and Disadvantages of Statement-Based and Row-Based Replication
- RPC与RMI区别
- js字符串函数(split、join、indexOf、substring)
- Linux-Vim编辑器使用
- 最受欢迎的5个Android ORM框架
- lvds(800*600)
- hdu 1195 Open the Lock
- hdu 1518 Square(深搜+剪枝)
- Android碎片第五期
- hdu 1702 ACboy needs your help again!
- hdu 1873 看病要排队
- hdu 1870 愚人节的礼物
- system V信号量和Posix信号量
- hdu 1509 Windows Message Queue (优先队列)