博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Power Strings POJ - 2406,字符串hash
阅读量:5328 次
发布时间:2019-06-14

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

题目链接:

题目描述

定义两个字符串s1和s2的乘积s1*s2为将s1和s2连结起来得到的字符串。 
例如:s1="xy",s2="z",那么s1*s2="xyz"。 
由此可以定义s1的幂次:s1^0="",s1^n=s1*s1^(n-1),n>0。

输入

输入包含多组测试数据。 
每组数据由一行构成,包含一个字符串s。 
输入数据以"."结束。

输出

对于每组输入数据输出一行,找出最大的正整数n,使得存在某个字符串a,s = a^n.

样例输入

abcdaaaaababab.

样例输出

143 题解:字符串hash,然后枚举子串长度,。模板套一下就可以
//#include
#include
#include
#include
#include
#include
#define pb push_back#define ll long long#define ull unsigned long long#define rank wepsdas#define PI 3.14159265#define ls l,m,rt<<1#define rs m+1,r,rt<<1|1#define eps 1e-7using namespace std;const int base=23;const int N=1e6+100;const int mod=1e9+7;struct hash{ char s[N]; ull h[N],qp[N]; ll p[N],len,val[N]; void init() { h[0]=val[0]=0; qp[0]=p[0]=1; len=strlen(s+1); for(int i=1;i<=len;i++) { qp[i]=qp[i-1]*base; h[i]=h[i-1]*base+s[i]; } } ull get_hash(int l,int r) { return h[r]-h[l-1]*qp[r-l+1]; }}ac;bool judge(int l){ ull tmp=ac.get_hash(1,l); for(int i=l+1;i<=ac.len;i+=l) { if(tmp!=ac.get_hash(i,i+l-1))return false; } return true;}int main() { while(scanf("%s",ac.s+1)) { ac.init(); if(ac.len==1&&ac.s[1]=='.')break; // printf("%s",ac.s+1); //ŝ for(int i=) int ans=-1; for(int i=1;i<=ac.len;i++) { if(ac.len%i==0) { if(judge(i)) { ans=i;break; } } } printf("%d\n",ac.len/ans); } return 0;}

 

 

 

转载于:https://www.cnblogs.com/lhclqslove/p/10322531.html

你可能感兴趣的文章
观察者模式(Observer)
查看>>
python中numpy.r_和numpy.c_
查看>>
egret3D与2D混合开发,画布尺寸不一致的问题
查看>>
freebsd 实现 tab 命令 补全 命令 提示
查看>>
struts1和struts2的区别
查看>>
函数之匿名函数
查看>>
shell习题第16题:查用户
查看>>
Redis常用命令
查看>>
2018.11.06 bzoj1040: [ZJOI2008]骑士(树形dp)
查看>>
2019.02.15 bzoj5210: 最大连通子块和(链分治+ddp)
查看>>
redis cluster 集群资料
查看>>
微软职位内部推荐-Sr. SE - Office incubation
查看>>
微软职位内部推荐-SOFTWARE ENGINEER II
查看>>
centos系统python2.7更新到3.5
查看>>
C#类与结构体究竟谁快——各种函数调用模式速度评测
查看>>
我到底要选择一种什么样的生活方式,度过这一辈子呢:人生自由与职业发展方向(下)...
查看>>
poj 题目分类
查看>>
windows 安装yaml支持和pytest支持等
查看>>
读书笔记:季羡林关于如何做研究学问的心得
查看>>
面向对象的优点
查看>>