Power Strings

柔情只为你懂 2021-11-17 15:02 329阅读 0赞

写在题目前:POJ太好用啦!

描述

给定两个字符串a和b,我们将* b定义为它们的串联。例如,如果a =“abc”而b =“def”则a * b =“abcdef”。如果我们将连接视为乘法,则以正常方式定义非负整数的取幂:a ^ 0 =“”(空字符串)和^(n + 1)= a *(a ^ n)。

输入

每个测试用例都是一行输入,表示s,一串可打印的字符。s的长度至少为1,不超过1百万个字符。包含句点的行在最后一个测试用例之后。

输出

对于每个s,您应该打印最大的n,使得某些字符串a的s = a ^ n。

样本输入

  1. A B C D
  2. AAAA
  3. ABABAB
  4. .

样本输出

  1. 1
  2. 4
  3. 3

提示

这个问题有很大的输入,使用scanf而不是cin来避免时间限制超过。

分析:

本题要求对于KMP有详细理解,尤其是对于它的P数组理解,以此计算答案。

CODE:

  1. 1 #include<iostream>
  2. 2 #include<cstdio>
  3. 3 using namespace std;
  4. 4 const int M=1000005;
  5. 5 char a[M];
  6. 6 int p[M],n;
  7. 7 int main(){
  8. 8 while (1){
  9. 9 cin>>a+1;
  10. 10 if (a[1]=='.') break;
  11. 11 n=strlen(a+1);
  12. 12 p[1]=0;
  13. 13 int j=0;
  14. 14 for (int i=1;i<n;i++){
  15. 15 while (j>0&&a[j+1]!=a[i+1]) j=p[j];
  16. 16 if (a[j+1]==a[i+1]) j++;
  17. 17 p[i+1]=j;
  18. 18 }
  19. 19 if (n%(n-p[n])==0) cout<<n/(n-p[n])<<endl;
  20. 20 else cout<<1<<endl;
  21. 21 }
  22. 22 return 0;
  23. 23 }

转载于:https://www.cnblogs.com/kanchuang/p/11133684.html

发表评论

表情:
评论列表 (有 0 条评论,329人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Power Strings

    写在题目前:POJ太好用啦! 描述 给定两个字符串a和b,我们将\ b定义为它们的串联。例如,如果a =“abc”而b =“def”则a \ b =“abcdef”。如果我