...字符串hash.

假如长度x是一个循环节, 那么对于任意n(x | n)也是一个循环节.

设当前询问区间[l, r]长度为len = ∏piai, 最终答案ans = ∏piai' ,我们只需枚举len的质因数来确定ai'即可

#include<bits/stdc++.h>

using namespace std;

typedef unsigned long long ull;

const int maxn = 500009;
const ull P = 1000173169; char S[maxn];
int check[maxn], prime[maxn], N = 0, n;
ull H[maxn], K[maxn]; void init() {
memset(check, 0, sizeof check);
for(int i = 2; i <= n; i++) {
if(!check[i])
check[i] = prime[N++] = i;
for(int j = 0; j < N && i * prime[j] <= n; j++) {
check[i * prime[j]] = prime[j];
if(i % prime[j] == 0) break;
}
}
H[n] = 0; K[0] = 1;
for(int i = n - 1; ~i; i--)
H[i] = H[i + 1] * P + S[i];
for(int i = 1; i <= n; i++)
K[i] = K[i - 1] * P;
} inline bool jud(int a, int b, int L) {
return H[a] - H[a + L] * K[L] == H[b] - H[b + L] * K[L];
} void Read() {
cin >> n;
char* t = S;
for(; !islower(*t); *t = getchar());
for(int i = 1; i < n; i++)
*++t = getchar();
} int main() { Read();
init(); int q; scanf("%d", &q);
while(q--) {
int l, r; scanf("%d%d", &l, &r); l--; r--;
int ans = r - l + 1, t = ans;
while(t > 1) {
int x = check[t];
while(ans % x == 0 && jud(l, l + ans / x, r - l + 1 - ans / x)) ans /= x;
for(; t % x == 0; t /= x);
}
printf("%d\n", ans);
} return 0;
}

  

2795: [Poi2012]A Horrible Poem

Time Limit: 50 Sec  Memory Limit: 128 MB
Submit: 202  Solved: 115
[Submit][Status][Discuss]

Description

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

Input

第一行一个正整数n (n<=500,000),表示S的长度。
第二行n个小写英文字母,表示字符串S。
第三行一个正整数q (q<=2,000,000),表示询问个数。
下面q行每行两个正整数a,b (1<=a<=b<=n),表示询问字符串S[a..b]的最短循环节长度。

Output

依次输出q行正整数,第i行的正整数对应第i个询问的答案。

Sample Input

8
aaabcabc
3
1 3
3 8
4 8

Sample Output

1
3
5

HINT

 

Source

BZOJ 2795: [Poi2012]A Horrible Poem( hash )的更多相关文章

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

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

  2. bzoj 2795 [Poi2012]A Horrible Poem hash+线性筛

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

  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 hash

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

  5. 【BZOJ】2795: [Poi2012]A Horrible Poem

    题意 一个长度为\(n(n \le 500000)\)的字符串\(s\),给\(q(q \le 2000000)\)个询问,每个询问给一个区间\([l, r]\),求这个区间内最短的循环节. 分析 分 ...

  6. [POI2012]OKR-A Horrible Poem hash

    题面:洛谷 题解: 首先我们需要知道一个性质,串s的最小循环节 = len - next[len].其中next[len]表示串s的一个最长长度使得s[1] ~ s[next[len]] == s[l ...

  7. 【bzoj2795】[Poi2012]A Horrible Poem Hash+分解质因数

    题目描述 给出一个由小写英文字母组成的字符串S,再给出q个询问,要求回答S某个子串的最短循环节.如果字符串B是字符串A的循环节,那么A可以由B重复若干次得到. 输入 第一行一个正整数n (n<= ...

  8. BZOJ2795&2890&3647[Poi2012]A Horrible Poem——hash

    题目描述 给出一个由小写英文字母组成的字符串S,再给出q个询问,要求回答S某个子串的最短循环节.如果字符串B是字符串A的循环节,那么A可以由B重复若干次得到. 输入 第一行一个正整数n (n<= ...

  9. [BZOJ2795][Poi2012]A Horrible Poem

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

随机推荐

  1. Qt5 FOR WINCE7, Visual Studio 2008环境的搭建

    Qt5 FOR WINCE7, Visual Studio 2008环境的搭建 Qt5发布时,试过配置Qt5 for wince的环境,原因是暂时不支持WINCE.前几天意外发现官方博客说明已经开始支 ...

  2. android service和activity的通讯

    我们须要用下面方式来启动service: </pre><pre name="code" class="java"><span st ...

  3. HDU4712+随机算法

    随机算法 求n个20位的2进制串的MinDist. Dist:两个串的异或结果中1的个数 /* 随机算法 */ #include<algorithm> #include<iostre ...

  4. C++设计模式之状态模式(四)

    4.状态模式总结 状态模式将一个对象在不同状态下的不同行为封装在一个个状态类中,通过设置不同的状态对象能够让环境对象拥有不同的行为.而状态转换的细节对于client而言是透明的.client不直接操作 ...

  5. ie调试控制台

    function initConsole() { var console = document.createElement('div'); console.id = 'errorConsole'; d ...

  6. 将一个数转化为二进制后,求其中1的个数 C++

    #include <iostream>using namespace std;int func(int x){ int count=0; while(x) { x=x&(x-1); ...

  7. 解析ASP.NET Mvc开发之删除修改数据

    目录: 1)从明源动力到创新工场这一路走来 2)解析ASP.NET WebForm和Mvc开发的区别 3)解析ASP.NET Mvc开发之查询数据实例 4)解析ASP.NET Mvc开发之EF延迟加载 ...

  8. ThinkPHP第十一天(关联模型使用,独立分组配置,MySQL concat用法)

    1.关联模型的使用 定义方式:新建一个类文件UserRelationModel.class.php Class UserRelationModel extends RelationModel{ pro ...

  9. Windows下配置Mysql

    这里说的配置Mysql,是在安装时进行的,请先查看:Windows平台下安装Mysql 紧接上文,安装完成后将配置选项打上对勾,按下“Finish”,出现下面的界面,这里有一个很好的功能,mysql配 ...

  10. jQuery.form 中的 ajaxForm() 和 ajaxSubmit()

    官方例子  http://malsup.com/jquery/form/#ajaxForm官方API   http://malsup.com/jquery/form/#api中文API   http: ...