P3538 [POI2012]OKR-A Horrible Poem

hash+线性筛

题解 <----这篇写的不错(其实是我懒得码字了qwq)

UVA10298 Power Strings 的升级版

判断一个长为 u 的子串是否为 长为 n 的主串的循环子串 只要比较 [1,n-u ]和 [u+1, n]的hash值即可(所以说我以前都是瞎搞〒▽〒)

想了想,还是加点注释吧,不然为啥要写博客总结呢(逃

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cctype>
using namespace std;
typedef unsigned long long ull;
inline int Int(){
char c=getchar(); int x=;
while(!isdigit(c)) c=getchar();
while(isdigit(c)) x=(x<<)+(x<<)+(c^),c=getchar();
return x;
}
const int base=;
int n,q,cnt,v[],prime[],it_pri[];
char a[];
ull h1[],fac[]; //自然溢出hash
void get_prime(){ //线性筛筛素数
for(int i=;i<=n;++i){
if(!v[i]) prime[++cnt]=v[i]=i;
for(int j=;j<=cnt;++j){
if(prime[j]>v[i]||prime[j]>n/i) break;
v[prime[j]*i]=prime[j];
}
}
}
inline bool check(int l1,int r1,int l2,int r2){ //hash值比较
ull p1=h1[r1]-h1[l1-]*fac[r1-l1+];
ull p2=h1[r2]-h1[l2-]*fac[r2-l2+];
return p1==p2;
}
int main(){
n=Int(); scanf("%s",a); fac[]=;
for(int i=;i<=n;++i){
h1[i]=h1[i-]*base+(ull)a[i-];
fac[i]=fac[i-]*base;
} //普通的hash
get_prime();
q=Int(); int l,r;
for(int i=;i<=q;++i){
l=Int(); r=Int();
int t=,len=r-l+;
while(len>) it_pri[++t]=v[len],len/=v[len]; //分解质因数
len=r-l+;
for(int j=;j<=t;++j){
int u=len/it_pri[j];
if(check(l,r-u,l+u,r)) len=u; //不断缩小循环子串的最小值
}
printf("%d\n",len);
}
return ;
}

P3538 [POI2012]OKR-A Horrible Poem的更多相关文章

  1. 【bzoj2795】【Poi2012】A Horrible Poem

    题解: 询问区间的整循环节 设区间长度为$n$ 如果有循环节长为$x$和$y$,那由斐蜀定理得$gcd(x,y)$也一定为一个循环节: 假设最小的循环节长为$mn$,那么对于任何循环节长$x$,一定$ ...

  2. 洛谷P3538 [POI2012]OKR-A Horrible Poem [字符串hash]

    题目传送门 A Horrible Poem 题目描述 Bytie boy has to learn a fragment of a certain poem by heart. The poem, f ...

  3. 2795: [Poi2012]A Horrible Poem

    2795: [Poi2012]A Horrible Poem Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 484  Solved: 235[Subm ...

  4. [BZOJ2795][Poi2012]A Horrible Poem

    2795: [Poi2012]A Horrible Poem Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 261  Solved: 150[Subm ...

  5. BZOJ 2795: [Poi2012]A Horrible Poem( hash )

    ...字符串hash. 假如长度x是一个循环节, 那么对于任意n(x | n)也是一个循环节. 设当前询问区间[l, r]长度为len = ∏piai, 最终答案ans = ∏piai' ,我们只需枚 ...

  6. bzoj 2795 [Poi2012]A Horrible Poem hash+数论

    2795: [Poi2012]A Horrible Poem Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 640  Solved: 322[Subm ...

  7. 【BZOJ2795】[Poi2012]A Horrible Poem hash

    [BZOJ2795][Poi2012]A Horrible Poem Description 给出一个由小写英文字母组成的字符串S,再给出q个询问,要求回答S某个子串的最短循环节.如果字符串B是字符串 ...

  8. #10038.A Horrible Poem

    #10038.A Horrible Poem 题目传送门 思路解析 既然这道题目在hash板块里,那么自然就可以想到用hash做这道题目. 首先我们可以用hash数组存储字符串的前缀的hash值. 因 ...

  9. 【hash】A Horrible Poem

    [题目链接] # 10038. 「一本通 2.1 练习 4」A Horrible Poem [参考博客] A Horrible Poem (字符串hash+数论) [题目描述] 给出一个由小写英文字母 ...

随机推荐

  1. 获取验证码随机字符串@return string $captcha,随机验证码文字

    <?php//验证码工具类class Captcha{//属性private $width;private $height;private $fontsize;private $pixes;pr ...

  2. PPTP客户端无法拨号778故障解决

    Win7客户端无法拨号提示778 CentOS服务器端 日志/var/log/messages提示一下错误信息 GRE: read(fd=6,buffer=611860,len=8196) from ...

  3. 11.21 CSS学习-下午

    CSS框模型,看似一个盒子,封装周围的HTML元素,包括:边距.边框.填充和实际内容Margin:清除边框区域,没有背景色,完全透明Border:边框周围的填充和内容,边框是受到盒子的背景色影响Pad ...

  4. POJ_2533_Longest Ordered Subsequence

    Longest Ordered Subsequence Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 55490   Acc ...

  5. iOS多线程编程之GCD介绍(转载)

    一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果公司为多核的并行运算提 ...

  6. 【RBAC】打造Web权限控制系统

    引言 权限系统模块对于互联网产品是一个非常重要的功能,可以控制不同的角色合理的访问不同的资源从而达到安全访问的作用 此外本次课程有视频讲解: http://www.imooc.com/learn/79 ...

  7. Python requests 301/302/303重定向(跨域/本域)cookie、Location问题

    今天使用request的get方法获取一个网站的登录页信息,结果使用charles抓包的时候发现该网站登录页303(重定向的问题),网上查了很多资料,原因如下: 一.cookie 原因:利用reque ...

  8. JS中"属性"的用法

    JS的属性和C#有相似之处  ! 使用get和set来进行属性的获取和设置 var obj={ a:"1", get age(){ return obj.a; }, set age ...

  9. Git 常用命令(转)

    原文:http://www.cnblogs.com/1-2-3/archive/2010/07/18/git-commands.html add by zhj :图是用 思维导图 软件MindMapp ...

  10. usb设备运行不正常的解决方法(转)

    add by zhj:上午鼠标还用的好好的,下午就不能用了,插上之后提示“跟这台计算机连接的一个usb设备运行不正常”,尼玛,什么情况?我今天没安装软件啊,换了个USB接口也不行,在另一台电脑上试还是 ...