题目大意

bzoj 2795
给出一个由小写英文字母组成的字符串S,再给出q个询问,要求回答S某个子串的最短循环节。
如果字符串B是字符串A的循环节,那么A可以由B重复若干次得到。
n<=500,000 , q<=2,000,000

分析

判循环节用hash
\(O(q\sqrt n)\)枚举因子?
TLE
注意一个特殊的性质
若长度len可为循环节,则若(klen) | n,(klen)也为循环节
不会出现两个循环节长度互质除非1是循环节
由于已知整个串是循环节
于是我们可以枚举质因子判断循环节能否缩短
线性筛预处理一波
\(O(q\log n)\)

原理

每个循环节都可以被最短循环节复制k倍表示
所以从原串缩短的过程中,能被最短循环节表示的本质没变,依然可以继续缩短
(反证假设不可以被最短循环节表示,则有它们的gcd才是最短循环节)
至于证明如果长度A是循环节,长度B是循环节,那么gcd(A,B)也是循环节
根据扩欧,存在 Ax+By=g
且根据循环节定义\(S[i]=S[i+k_1A+k_2B]\)
则对于\(\forall i\)都有\(S[i]=S[i+Ax+By]=S[i+gcd(A,B)]\)

solution

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cmath>
#include <algorithm>
using namespace std;
typedef unsigned long long ull;
typedef long long LL;
const int M=500007;
const ull W=131;inline int rd(){int x=0;bool f=1;char c=getchar();for(;!isdigit(c);c=getchar()) if(c=='-') f=0;for(;isdigit(c);c=getchar()) x=x*10+c-48;return f?x:-x;
}int n,m;
char s[M];
ull hsh[M],pw[M];
int prime[M],cnt;
int vis[M];
int split[M][20];void init(){int i,j,k,t;vis[1]=1;for(i=2;i<M;i++){if(!vis[i]){prime[++cnt]=i;split[i][0]=1;split[i][1]=i;}for(j=1;j<=cnt;j++){if((LL)i*prime[j]>=M) break;t=i*prime[j];vis[t]=1;for(k=1;k<=split[i][0];k++) split[t][k]=split[i][k];split[t][0]=split[i][0];if(i%prime[j]==0) break;split[t][++split[t][0]]=prime[j];}}
}ull gethsh(int x,int y){int len=y-x+1;return hsh[y]-hsh[x-1]*pw[len];
}int main(){int i,j,x,y,len,z,tp,pri;n=rd();scanf("%s",s+1);m=rd();init();for(hsh[0]=0,i=1;i<=n;i++) hsh[i]=hsh[i-1]*W+s[i];for(pw[0]=1,i=1;i<=n;i++) pw[i]=pw[i-1]*W;while(m--){x=rd(),y=rd();len=y-x+1;z=len;for(j=1;j<=split[z][0];j++){pri=split[z][j];while(len%pri==0){tp=len/pri;if(gethsh(x,y-tp)!=gethsh(x+tp,y)) break;len/=pri;}}printf("%d\n",len);}return 0;
}

转载于:https://www.cnblogs.com/acha/p/6394779.html

bzoj 2795 [Poi2012]A Horrible Poem hash+线性筛相关推荐

  1. bzoj 2820 YY的GCD - 莫比乌斯反演 - 线性筛

    Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种 傻×必 ...

  2. bzoj 2803: [Poi2012]Prefixuffix(双Hash)

    2803: [Poi2012]Prefixuffix Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 413  Solved: 167 [Submit] ...

  3. #10038.A Horrible Poem

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

  4. BZOJ 3823 定情信物 线性筛乘法逆元

    题目大意:n维多面体中有多少n-1维,n-2维,n-3维...1维元素,求他们的异或和并%p. 思路:考试题,当时做的时候不会线性筛乘法逆元,就得了70分... 算法和标程不太一样,标程好象是递推,但 ...

  5. 中高级数论 [欧拉函数线性筛,二次剩余]

    欧拉函数线性筛 对于素数ppp, φ(p∗i)={p−1i=1p∗φ(i)p∣i(p−1)∗φ(i)p∤i\varphi (p*i)= \begin{cases} p-1& i=1\\ p*\ ...

  6. Bzoj3309-DZY Loves Math【莫比乌斯反演,线性筛】

    正题 bzoj没了,在darkbzoj交吧 题目链接:https://darkbzoj.tk/problem/3309 题目大意 定义f(x)f(x)f(x)表示xxx所有质因数中最大的指数幂. 求∑ ...

  7. 【数学知识】三种方法求 [1,n] 中所有数欧拉函数(线性筛欧拉函数优化至 O(n) )

    整理的算法模板合集: ACM模板 ①直接求小于或等于n,且与n互质的数个数(求[1,n]中所有数的欧拉函数时间复杂度:O(nn)O(n\sqrt{n})O(nn​)) ②求[1,n]之间每个数的质因数 ...

  8. 【bzoj2694】Lcm 莫比乌斯反演+线性筛

    题目描述 求$\sum\limits_{i=1}^n\sum\limits_{j=1}^m|\mu(gcd(i,j))|lcm(i,j)$,即$gcd(i,j)$不存在平方因子的$lcm(i,j)$之 ...

  9. [SDOI2008]沙拉公主的困惑 线性筛 素数+欧拉

    本文为博主原创文章,欢迎转载,请注明出处 www.cnblogs.com/yangyaojia [SDOI2008]沙拉公主的困惑 线性筛 素数+欧拉 题目大意 给定n,m,求在1到n!内与m!互质的 ...

  10. 【bzoj3309】DZY Loves Math 莫比乌斯反演+线性筛

    Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0. 给定正整数a,b, ...

最新文章

  1. java接口如何定义常量 c_java接口定义常量研究
  2. 漫画科普 | 5G到底是个什么玩意儿?
  3. 牛客第六场 H-Hopping Rabbit
  4. 浙江省计算机vb二级考试题库,浙江省计算机二级vb上机试题题库..doc
  5. ps命令使用 进程查看
  6. Oracle010316,安装oracle后登录时出现 ERROR: ORA-01031 insufficient privileges
  7. python支持向量机 股票_小蛇学python(4)利用SVM预测股票涨跌
  8. Hadoop hdfs上传文件报错解决
  9. log4j.xml的实用例子
  10. 重构Webpack系列之二 ---- 入口起点
  11. 蔡高厅高等数学18-函数在一点处的连续、函数在区间内的连续、两类间断点的判断
  12. sigmoid/softmax指数运算溢出问题的解决方法
  13. opencv 摄像机标定
  14. Qy词典-免费离线的中英词典
  15. android全面屏像素密度,手机屏幕分辨率、PPI像素密度科普知识大全
  16. 基于深度学习的小目标检测方法的调查和性能评估
  17. als算法参数_推荐算法之ALS
  18. 接口常见安全漏洞说明
  19. 2022中央财经大学《901C语言程序设计》考研编程题回忆版
  20. 虚拟机Ubuntu没有IP地址上不了网

热门文章

  1. sonarqube插件开发(二) 开发插件
  2. http awstats安装
  3. [软件架构]基于PluginRT的插件编程
  4. Bash脚本15分钟进阶教程-转
  5. 抽象类与接口的区别(
  6. PHP composer
  7. Windows Server 2008 R2之三管理活动目录数据库
  8. 利用数据绑定(DataBinding)简化多线程数据展示
  9. 掌握了这30道MySQL基础面试题,我成了面霸
  10. 六面美团后,我有一个重要的发现...