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. VS远程调试亲历

    背景: 很多情况下本地开发没有问题,可放到服务器就有问题(更气人的是测试环境时也行可就是生产环境不行!) 1.想到可能是服务器环境不对,Web服务器版本不对 2.有文件读写是不是文件夹权限 3.Web ...

  2. 把本地项目文件上传到github远程仓库的教程

    参考廖雪峰的git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000  非常详 ...

  3. CSS垂直导航栏

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. SSL/TLS 握手优化详解

    随着 HTTP/2 的逐渐普及,以及国内网络环境越来越糟糕(运营商劫持和篡改),HTTPS 已经开始成为主流.HTTPS 在 TCP 和 HTTP 之间增加了 TLS(Transport Layer ...

  5. pyobjc-framework-Cocoa 5.1.2

    Introduction — PyObjC - the Python to Objective-C bridge https://pyobjc.readthedocs.io/en/latest/ py ...

  6. UNSIGNED command-line client

    High Performance MySQL, Third Edition by Baron Schwartz, Peter Zaitsev, and Vadim Tkachenko   There ...

  7. Oracle enterprise linux系统的安装以及ORACLE12C的安装

    本文所用到的所有参数均位于文后附录中 进入安装配置目录 分区选择i will configure partitioning 之后选择 请为我分区 关闭KDUMP 更改主机名,打开网络连接 在软件安装中 ...

  8. Intellij Idea常用配置设置

    1.配置Intellij Idea的配置文件从默认c盘转移到其他盘符 找到Intellij idea的安装文件,在bin目录下找到idea.properties配置文件,如下把Idea的配置文件夹和I ...

  9. 交换机-查看mac地址表

    1.使用交换机命令行 en  或者  enable   进入特权模式 Switch> Switch>en Switch# Switch# 2.查看交换机中的MAC地址表 Switch#sh ...

  10. flask简单的路由分发

    flask简单的路由分发 from flask import Flask, request app = Flask(__name__) @app.route('/hello') def index() ...