博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Power Strings
阅读量:5133 次
发布时间:2019-06-13

本文共 895 字,大约阅读时间需要 2 分钟。

写在题目前: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。

 

样本输入

A B C DAAAAABABAB.

样本输出

143

 

提示

 

这个问题有很大的输入,使用scanf而不是cin来避免时间限制超过。
 
分析:
本题要求对于KMP有详细理解,尤其是对于它的P数组理解,以此计算答案。
 
CODE:
1 #include
2 #include
3 using namespace std; 4 const int M=1000005; 5 char a[M]; 6 int p[M],n; 7 int main(){ 8 while (1){ 9 cin>>a+1;10 if (a[1]=='.') break;11 n=strlen(a+1);12 p[1]=0;13 int j=0;14 for (int i=1;i
0&&a[j+1]!=a[i+1]) j=p[j];16 if (a[j+1]==a[i+1]) j++;17 p[i+1]=j;18 }19 if (n%(n-p[n])==0) cout<

 

 

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

你可能感兴趣的文章
Real-Time Rendering 笔记
查看>>
如何理解HTML结构的语义化
查看>>
Intellij IDEA(eclipse设置)常用快捷键
查看>>
深入理解Java:注解(Annotation)基本概念
查看>>
NAT基本原理
查看>>
Java Content Repository API 简介 转自(https://www.ibm.com/developerworks/cn/java/j-jcr/)
查看>>
visio二次开发——图纸解析
查看>>
Activity之间的跳转:
查看>>
iTunes Connect 开发者上手经验(转)
查看>>
vertical-align你为什么不生效
查看>>
C++ 实践总结
查看>>
composer 国内镜像配置
查看>>
软件是天时、地利、人和的产物!
查看>>
python定时清空本目录下除本脚本外的全部文件
查看>>
【PHP】在目标字符串指定位置插入字符串
查看>>
【JS】jQuery设置定时器,访问服务器(PHP示例)配合微信、支付宝原生支付,跳转web网页...
查看>>
实验四2
查看>>
VS2012+Win7网站发布详细步骤
查看>>
Android现学现用第十一天
查看>>
Bin Packing 装箱问题——NPH问题的暴力枚举 状压DP
查看>>