传送门

解题思路

这是一道上周的考试题。。。当时考的时候看了一眼,"呀,这不是调和级数,nlogn么!!!" ,然后一写就写了个n^2的。。。。结果边界还弄错40分滚蛋了。。正解就是正着求一遍hash,倒着求一遍hash,再求个逆元,O(nlogn)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath> using namespace std;
const int MAXN = ;
const int mod = ;
typedef long long LL; inline int rd(){
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {f=ch=='-'?:;ch=getchar();}
while(isdigit(ch)) {x=(x<<)+(x<<)+ch-'';ch=getchar();}
return f?x:-x;
} int n,a[MAXN],base,cnt,ans,Ans[MAXN],num;
int hsh[MAXN],hsh_[MAXN];
int inv[MAXN],c[]; int fast_pow(int x,int y){
int ret=;
for(;y;y>>=){
if(y&) ret=(LL)ret*x%mod;
x=(LL)x*x%mod;
}
return ret;
} int main(){
// freopen("bead.in","r",stdin);
// freopen("bead.out","w",stdout);
n=rd();base=n+;inv[]=;int now=;
for(int i=;i<=n;i++) {
now=(LL)now*base%mod;a[i]=rd();inv[i]=fast_pow(now,mod-);
hsh[i]=hsh[i-]+(LL)now*a[i]%mod;hsh[i]%=mod;
}now=;
for(int i=n;i;i--) {
now=(LL)now*base%mod;
hsh_[i]=hsh_[i+]+(LL)a[i]*now%mod;
hsh_[i]%=mod;
}
// cout<<hsh_[1]<<endl;cout<<inv[n]<<endl;
int tmp,tmp_;
for(int i=;i<=n;i++){
cnt=;
if(n/i<ans) break;
for(register int j=i;j<=n;j+=i) {
if(j>n) break;
tmp=((hsh[j]-hsh[j-i])%mod+mod)%mod;
tmp_=((hsh_[j-i+]-hsh_[j+])%mod+mod)%mod;
tmp=(LL)tmp*inv[j-i]%mod;tmp_=(LL)tmp_*inv[n-j]%mod;
if(c[tmp]==i && c[tmp_]==i) continue;
c[tmp]=c[tmp_]=i;cnt++;
}
if(cnt>ans) {ans=cnt;num=;Ans[++num]=i;}
else if(cnt==ans) Ans[++num]=i;
}
printf("%d %d\n",ans,num);
for(int i=;i<=num;i++) printf("%d ",Ans[i]);
return ;
} /*
21
1 1 1 2 2 2 3 3 3 1 2 3 3 1 2 2 1 3 3 2 1
*/

LUOGUP3498 [POI2010]KOR-Beads (哈希)的更多相关文章

  1. LuoguP3498 [POI2010]KOR-Beads

    呀呀呀,临走10分钟刷一道水题 然而只是记一下第一次hash被卡 各种模数都被卡了... 本来想打双哈希了,后来皮了一下,模数改成了998244353,然后竟然A掉了 正着hash一遍,反着hash一 ...

  2. bzoj 2081 [Poi2010]Beads hash+调和级数

    2081: [Poi2010]Beads Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1003  Solved: 334[Submit][Statu ...

  3. 【BZOJ2081】[Poi2010]Beads hash+调和级数

    [BZOJ2081][Poi2010]Beads Description Zxl有一次决定制造一条项链,她以非常便宜的价格买了一长条鲜艳的珊瑚珠子,她现在也有一个机器,能把这条珠子切成很多块(子串), ...

  4. BZOJ_2081_[Poi2010]Beads_哈希

    BZOJ_2081_[Poi2010]Beads_哈希 Description Zxl有一次决定制造一条项链,她以非常便宜的价格买了一长条鲜艳的珊瑚珠子,她现在也有一个机器,能把这条珠子切成很多块(子 ...

  5. BZOJ 2081: [Poi2010]Beads

    Description 问把n截成每个长度后不同子串个数. Sol 调和极数+Hash. 首先这是一个式子 \(n\sum_{i=1}^n \frac {1}{i}\) . 这东西就是调和极数再乘上 ...

  6. LOJ#2427. 「POI2010」珍珠项链 Beads

    题目地址 题目链接 题解 不会算复杂度真是致命,暴力枚举k每次计算是n/2+n/3+n/4+...+1的,用调和级数算是\(O(nlogn)\)的... 如果写哈希表的话能够\(O(nlogn)\), ...

  7. [POI2010]Beads

    题目大意: 给定一个长度为$n(n\leq200000)$的串$S_{1\sim n}$,选择一个$l$,从$S_1$开始,将$S$分为连续的若干段,使得每一段长度为$l$.令$k$为分出来不同的子串 ...

  8. 【哈希 二分】bzoj2084: [Poi2010]Antisymmetry

    可以用manacher或者SA搞过去的:非常有趣的hash题 Description 对于一个01字符串,如果将这个字符串0和1取反后,再将整个串反过来和原串一样,就称作“反对称”字符串.比如0000 ...

  9. 【BZOJ2081】Beads(哈希表)

    题意: 翻转是指其中一段长度为k的子串全部翻转 n<=200000 a[i]<=n 思路:枚举k,直接哈希判充即可 时间复杂度是n/i求和,根据定理可得是O(n log n)级别的 单哈双 ...

随机推荐

  1. java进行微信h5支付开发

    最近在做微信支付开发用的框架是 srpingMVC mybatis spring 下面是开发流程图 我们只需要开发红色标记的模块就可以了. 具体参数详情可以查看微信开发者文档. 新手第一次写,写的不好 ...

  2. 【POJ】1182 食物链

    这是<挑战设计程序竞赛>中的例题. 题目链接:http://poj.org/problem?id=1182 题意:中文题面.不赘述. 题解: 代码: //带权并查集 #include< ...

  3. 【洛谷】P1962

    题目链接:https://www.luogu.org/problemnew/show/P1962 题意:求fib数列的第n项,很大.mod 1e9+7. 题解:BM直接推. 代码: #include ...

  4. qt5下面中文显示异常

    在源文件中插入# pragma execution_character_set("utf-8")即可

  5. 解决在python中进行CGI编程时无法响应的问题

    问题:我期望的效果是,后端解析脚本后,将结果返回给我,而不是将代码返回给我或者是让我下载文件. 参考地址:https://blog.csdn.net/C_chuxin/article/details/ ...

  6. docker ps -a

    1 pwd 2 mkdir data 3 ll 4 uname -n 5 cd data/ 6 ll 7 pwd 8 ll 9 wget -N --no-check-certificate https ...

  7. React和vue的差异和相似地方

    React 单向绑定(加插件后,还是可以双向绑定) Vue 双向绑定 组件化 1. React,需要编写render函数, 2. 当React状态的状态state改变是render就会重新被调用, 重 ...

  8. Delphi 第一课

    Delphi 是面向对象的 可视化的集成开发环境 对象包括属性 方法   事件. 用户事件 对象响应事件 不同的对象响应事件不一样

  9. luoguP1154 奶牛分厩 [数论]

    题目描述 农夫约翰有N(1<=N<=5000)头奶牛,每头奶牛都有一个唯一的不同于其它奶牛的编号Si,所有的奶牛都睡在一个有K个厩的谷仓中,厩的编号为0到K-1.每头奶牛都知道自己该睡在哪 ...

  10. 最大流Dinic算法的一些优化 [网络流][最大流]

    明天省夏要讲网络流啦!晚上翻出自己的模板发现是蓝书模板QwQ..拿出以前的提交代码(AC过的?) 曾经的提交记录 在luogu上重新提交一遍,结果gg...OVO 没有去除多余的inline 去除了多 ...