bzoj2795
循环节的经典性质
n是[l,r]这一段的循环节的充要条件是[l,r-n]和[l+n,r]相同 且n是长度的约数
然后不难想到根号的穷举约数的做法
有没有更好的做法,我们知道如果n是一个循环节,那么k*n也必定是一个循环节
我们只要穷举质因子,不断除以原长并保证其仍是循环节,直到不能再小为止即可
穷举质因子我们可以记录每个数的最小质因数(显然可以用线性筛搞),然后不断消去即可
这样就变成了nlogn的复杂度
注意这道题最好写双hash,由于pascal不能自然溢出,我卡出一个可以过的单hash……
const mo=;
bas=; var p,v,d,h:array[..] of longint;
len,l,r,m,j,k,i,n,t:longint;
s:ansistring; function hash(x,y:longint):longint;
begin
exit((h[x]-int64(h[y+])*int64(d[y-x+]) mod mo+mo) mod mo);
end; begin
readln(n);
for i:= to n do
begin
if v[i]= then
begin
v[i]:=i;
inc(t);
p[t]:=i;
end;
for j:= to t do
begin
if i*p[j]>n then break;
v[i*p[j]]:=p[j];
if i mod p[j]= then break;
end;
end;
d[]:=;
for i:= to n do
d[i]:=d[i-]*bas mod mo;
readln(s);
for i:=n downto do
h[i]:=(h[i+]*bas+ord(s[i])) mod mo;
readln(m);
for i:= to m do
begin
readln(l,r);
len:=(r-l+);
k:=len;
while k> do
begin
j:=v[k];
while (len mod j=) and (hash(l,r-len div j)=hash(l+len div j,r)) do len:=len div j;
while k mod j= do k:=k div j;
end;
writeln(len);
end;
end.
bzoj2795的更多相关文章
- 【bzoj2795】【Poi2012】A Horrible Poem
题解: 询问区间的整循环节 设区间长度为$n$ 如果有循环节长为$x$和$y$,那由斐蜀定理得$gcd(x,y)$也一定为一个循环节: 假设最小的循环节长为$mn$,那么对于任何循环节长$x$,一定$ ...
- BZOJ2795/2890/3647 [Poi2012]A Horrible Poem 【字符串hash】
题目链接 BZOJ2795 BZOJ2890 BZOJ3647 题解 三倍经验! 我们要快速求区间最小循环节 我们知道循环节有如下性质: ①当\(L\)为循环节长度,那么\(s[l...r - L] ...
- 【BZOJ2795】[Poi2012]A Horrible Poem hash
[BZOJ2795][Poi2012]A Horrible Poem Description 给出一个由小写英文字母组成的字符串S,再给出q个询问,要求回答S某个子串的最短循环节.如果字符串B是字符串 ...
- [BZOJ2795][Poi2012]A Horrible Poem
2795: [Poi2012]A Horrible Poem Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 261 Solved: 150[Subm ...
- [Poi2012]A Horrible Poem BZOJ2795
分析: 这是今天下午的考试题,推了2个小时,考试中A掉了 首先,循环串通过字符串hash可以O(1)判断:get_hash(l,r-len)==get_hash(l+len,r);显然可证. 我们其次 ...
- BZOJ2795&2890&3647[Poi2012]A Horrible Poem——hash
题目描述 给出一个由小写英文字母组成的字符串S,再给出q个询问,要求回答S某个子串的最短循环节.如果字符串B是字符串A的循环节,那么A可以由B重复若干次得到. 输入 第一行一个正整数n (n<= ...
- 【bzoj2795】[Poi2012]A Horrible Poem Hash+分解质因数
题目描述 给出一个由小写英文字母组成的字符串S,再给出q个询问,要求回答S某个子串的最短循环节.如果字符串B是字符串A的循环节,那么A可以由B重复若干次得到. 输入 第一行一个正整数n (n<= ...
- POI2012题解
POI2012题解 这次的完整的\(17\)道题哟. [BZOJ2788][Poi2012]Festival 很显然可以差分约束建图.这里问的是变量最多有多少种不同的取值. 我们知道,在同一个强连通分 ...
随机推荐
- 【经验】Angularjs 中使用 layDate 日期控件
layDate 控件地址:http://laydate.layui.com/ 前情:原来系统中使用的日期控件是UI bootstrap(地址:https://angular-ui.github.io/ ...
- wap开发使用jquery mobile之后页面不加载外部css样式文件/js文件
场景: wap开发,使用jquery mobile之后不会加载外部自定义的css文件了,需要手动刷新才会加载,查看外部自定义的js文件也是一样. 解决办法: 1.在page下面添加css样式,就不要写 ...
- IIS Express start introduction and applicationHost modification
1. First you need create a web project in VS 2. When you finish your project, click start then IIS E ...
- 传说中的Markov"不过如此”
因为看一篇题为 Passive Measurement of Interference in WiFi Network with Application in Misbehavior Detectio ...
- 3144:[HNOI2013]切糕 - BZOJ
题目描述 Description 经过千辛万苦小 A 得到了一块切糕,切糕的形状是长方体,小 A 打算拦腰将切糕切成两半分给小 B.出于美观考虑,小 A 希望切面能尽量光滑且和谐.于是她找到你,希望你 ...
- UVALive 4872 Underground Cables 最小生成树
题目链接: 题目 Underground Cables Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %ll ...
- hihocoder #1300 : 展胜地的鲤鱼旗 dp
题目链接: http://hihocoder.com/problemset/problem/1300 题解: 先用栈预处理出每个‘)’匹配的‘(’的位子,放在pos数组中. dp[i]表示以i结尾的合 ...
- 剑指offer--面试题7
//两个栈实现一个队列 #include<stack> //STL #include<iostream> using namespace std; template<cl ...
- [C/CPP系列知识] 在C中使用没有声明的函数时将发生什么 What happens when a function is called before its declaration in C
http://www.geeksforgeeks.org/g-fact-95/ 1 在C语言中,如果函数在声明之前被调用,那么编译器假设函数的返回值的类型为INT型, 所以下面的code将无法通过编译 ...
- [设计模式] 16 迭代器模式 Iterator Pattern
在GOF的<设计模式:可复用面向对象软件的基础>一书中对迭代器模式是这样说的:提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示. 类图和实例: 迭代器模式由以下角 ...