呀呀呀,临走10分钟刷一道水题

然而只是记一下第一次hash被卡

各种模数都被卡了...

本来想打双哈希了,后来皮了一下,模数改成了998244353,然后竟然A掉了

正着hash一遍,反着hash一遍

对于一个串都取正反hash值的min值,若其相同,则必然是相同串(不被卡的话)

计数用set就好了

 #include<bits/stdc++.h>
#define ull unsigned long long
using namespace std;
inline int read(){
int ans=,f=;char chr=getchar();
while(!isdigit(chr)){if(chr=='-')f=-;chr=getchar();}
while(isdigit(chr)) {ans=(ans<<)+(ans<<)+chr-;chr=getchar();}
return ans*f;
}const int M=2e5+,B=;
ull f[M],ff[M],h[M];
int s[M],n,maxn,cnt,k[M];
inline void Hash(){int i;
for(i=,h[]=;i<=n;i++) h[i]=h[i-]*B,f[i]=f[i-]*B+s[i];
for(i=n;i>=;i--) ff[i]=ff[i+]*B+s[i];
}
inline ull Get1(int l,int r){return f[r]-f[l-]*h[r-l+];}
inline ull Get2(int l,int r){return ff[l]-ff[r+]*h[r-l+];}
set<ull> ss;
inline int Calc(int k){
int t=;ss.clear();
for(int i=;i+k-<=n;i+=k){
ull tmp=min(Get1(i,i+k-),Get2(i,i+k-));
ss.insert(tmp);
}return ss.size();
}
int main(){
n=read();
for(int i=;i<=n;i++) s[i]=read();
Hash();
for(int i=;i<=n;i++){
int now=Calc(i);
if(now>maxn) maxn=now,cnt=;
if(now==maxn)k[++cnt]=i;
}
cout<<maxn<<" "<<cnt<<endl;
for(int i=;i<=cnt;i++) cout<<k[i]<<" ";
return ;
}

LuoguP3498 [POI2010]KOR-Beads的更多相关文章

  1. LUOGUP3498 [POI2010]KOR-Beads (哈希)

    传送门 解题思路 这是一道上周的考试题...当时考的时候看了一眼,"呀,这不是调和级数,nlogn么!!!" ,然后一写就写了个n^2的....结果边界还弄错40分滚蛋了..正解就 ...

  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

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

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

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

  6. BZOJ2081 : [Poi2010]Beads

    暴力枚举$k$,对于一个子串,计算它正着的hash值以及反着的hash值,取最小值得到其最终hash值. 对于$k$,一共有$\lfloor\frac{n}{k}\rfloor$个子串,计算出它们的最 ...

  7. [POI2010]Beads

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

  8. 【bzoj2081】[Poi2010]Beads Hash

    题目描述 Zxl有一次决定制造一条项链,她以非常便宜的价格买了一长条鲜艳的珊瑚珠子,她现在也有一个机器,能把这条珠子切成很多块(子串),每块有k(k>0)个珠子,如果这条珠子的长度不是k的倍数, ...

  9. POI2010题解

    POI2010题解 我也不知道我为什么就开始刷POI了 有些题目咕掉了所以不完整(我都不知道POI到底有多少题) [BZOJ2079][Poi2010]Guilds (貌似bz跟洛谷上的不是一个题?) ...

随机推荐

  1. .Net Core 部署之一 《CentOS 从GitHub/Gitee 等源代码网站部署Web网站》

    先看下楼主从某阿打折购买的渣渣服务器 lsb_release -a 一.安装dotnet-SDK 注册微软的服务 sudo rpm -Uvh https://packages.microsoft.co ...

  2. [转]ThinkPHP分页实例

    很多人初学thinkphp时,不太熟悉thinkphp的分页使用方法,现在将自己整理的分页方法分享下,有需要的朋友可以看看.   控制器中的代码:   $db = M("cost" ...

  3. 9.3.2 The force and release procedural statements

    Frm: IEEE Std 1364™-2001, IEEE Standard Verilog® Hardware Description Language Another form of proce ...

  4. HDU-1850-Being a Good Boy in Spring Festival-nim博弈

    一年在外 父母时刻牵挂春节回家 你能做几天好孩子吗寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场悄悄给爸爸买个小礼物主动地 强烈地 要求洗一次碗某一天早起 给爸妈用心地做回早餐 如果愿意 你还可以和爸妈 ...

  5. mysql 实现批量导入,并解决中文乱码问题

    public static String url = "jdbc:mysql://ip/database?characterEncoding=UTF-8"; //在database ...

  6. js 事件驱动原理

    还记得当初学JAVA-GUI编程时学习过事件监听机制,此时再学习JavaScript中的事件驱动机制,不免简单.当初学习时也是画过原理图,所以从原理图开始吧! js是采用事件驱动(event-driv ...

  7. axios全局拦截响应

    在系统开发过程中,若遇到长时间未操作,则需要将页面跳转到登录页面.因为现在都是前后端分离的开发模式,路由跳转都交给前端,而后端只返回一个报错信息,例如"errorMsg":&quo ...

  8. spring boot thymeleaf简单示例

    说实话,用起来很难受,但是人家官方推荐,咱得学 如果打成jar,这个就合适了,jsp需要容器支持 引入依赖 <dependency> <groupId>org.springfr ...

  9. mybatis 处理CLOB/BLOB类型数据

    BLOB和CLOB都是大字段类型. BLOB是按二进制来存储的,而CLOB是可以直接存储文字的. 通常像图片.文件.音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去.文章或者是较长的文字 ...

  10. Jmeter----函数助手参数化

    要填写开始日期和结束日期和赋值的变量名