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

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

 
Time Limit: 3000MS   Memory Limit: 65536K
Total Submissions: 41250   Accepted: 17150

Description

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).

Input

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.

Output

For each s you should print the largest n such that s = a^n for some string a.

Sample Input

abcdaaaaababab.

Sample Output

143

Hint

This problem has huge input, use scanf instead of cin to avoid time limit exceed.

Source

题解:

  本来想找后缀数组的题,发现可以用hash来O(n)解决。

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 using namespace std;10 typedef unsigned long long ULL;11 const ULL BASE=127;12 const int maxn=2000000;13 char s[maxn];14 int len;15 ULL base[maxn],hash[maxn];16 inline ULL get_hash(int l,int r){17 return hash[r]-hash[l-1]*base[r-l+1];18 }19 int main(){20 base[0]=1; for(int i=1;i<=1000000;i++) base[i]=base[i-1]*BASE;21 for(;;){22 scanf("%s",s+1); len=strlen(s+1);23 if(s[1]=='.') break;24 for(int i=1;i<=len;i++) hash[i]=hash[i-1]*BASE+s[i]-'a'+1;25 bool vis=false;26 for(int i=len-1;i>=1;i--){27 if(get_hash(1,i)==get_hash(len-i+1,len)&&len%(len-i)==0){28 vis=true;29 printf("%d\n",len/(len-i));30 break; 31 }32 }33 if(vis==false) puts("1");34 }35 return 0;36 }

 

 

 

转载于:https://www.cnblogs.com/CXCXCXC/p/5409863.html

你可能感兴趣的文章
【高级数据类型】- 1.数组类型
查看>>
在Spring Cloud中.yml与.properties
查看>>
磁盘挂载、磁盘格式化、swap分区
查看>>
Nginx访问日志、日志切割、静态文件管理
查看>>
centos系统下安装mysql
查看>>
修改页面出现默认值
查看>>
集群四部曲(三):完美的Spark集群搭建
查看>>
git上传项目步骤
查看>>
双系统安装Win 10与Ubuntu
查看>>
如何查找BAPI SD_SALESDOCUMENT_CHANGE里字段对应的数据库存储表
查看>>
springmvc源码解析之@EnableWebMvc六
查看>>
vim入门操作实践
查看>>
Purism Librem笔电将会更安全!新增高安全性启动程序PureBoot
查看>>
实人认证玩出新高度,给千年老城注入新生科技力量
查看>>
java对word文档的在线打开
查看>>
Oracle-数据字典统计信息
查看>>
比原链合约入门教程
查看>>
剥开比原看代码16:比原是如何通过/list-transactions显示交易信息的
查看>>
网站跳转劫持漏洞的发现与修复建议
查看>>
Watchdogs利用Redis实施大规模挖矿,常见数据库蠕虫如何破?
查看>>