解题:POI 2010 Beads
正反各做一遍哈希来判断,然后在两个哈希值里取一个$max/min$做哈希值,然后每次把子串们的哈希插进$set$里,最后统计集合大小,就可以优秀地在$O(nlog^2$ $n)$中出解了
然后我觉得这样太没有理想了,就写了一个挂链哈希表,结果跑的贼慢。。。
我挂链时的区分方法是换模数再模出一个新值,然后这样做的时候注意要和哈希表的基数和模数区分开
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=;
const long long bs=,md=;
const long long bas=,mod=;
long long num[N],hah[N][],huh[N][],pw[N][],val[N];
int p[M],nxt[N],outp[N];
int n,pos,cnt,ans;
long long Ghash(int l,int r,int t)
{
long long mdd=t?mod:md;
long long h1=((hah[r][t]-hah[l-][t]*pw[r-l+][t])%mdd+mdd)%mdd;
long long h2=((huh[l][t]-huh[r+][t]*pw[r-l+][t])%mdd+mdd)%mdd;
return max(h1,h2);
}
bool Fhash(long long has,long long hsh)
{
for(int i=p[has%md];i;i=nxt[i])
if(val[i]==hsh) return true;
return false;
}
void Ihash(long long has,long long hsh)
{
if(Fhash(has,hsh)) return ;
nxt[++cnt]=p[pos=has%md];
val[cnt]=hsh,p[pos]=cnt;
}
int main ()
{
scanf("%d",&n),pw[][]=pw[][]=;
for(int i=;i<=n;i++)
{
scanf("%lld",&num[i]);
pw[i][]=pw[i-][]*bs%md;
pw[i][]=pw[i-][]*bas%mod;
}
for(int i=;i<=n;i++)
{
hah[i][]=(hah[i-][]*bs+num[i])%md;
hah[i][]=(hah[i-][]*bas+num[i])%mod;
}
for(int i=n;i;i--)
{
huh[i][]=(huh[i+][]*bs+num[i])%md;
huh[i][]=(huh[i+][]*bas+num[i])%mod;
}
for(int i=;i<=n;i++)
{
memset(p,,sizeof p); cnt=;
for(int j=;j<=n-i+;j+=i)
Ihash(Ghash(j,j+i-,),Ghash(j,j+i-,));
if(cnt>ans) ans=cnt,outp[outp[]=]=i;
else if(cnt==ans) outp[++outp[]]=i;
}
printf("%d %d\n",ans,outp[]);
for(int i=;i<=outp[];i++)
printf("%d ",outp[i]);
return ;
}
解题:POI 2010 Beads的更多相关文章
- [BZOJ 2083] [POI 2010] Intelligence test
Description 霸中智力测试机构的一项工作就是按照一定的规则删除一个序列的数字,得到一个确定的数列.Lyx很渴望成为霸中智力测试机构的主管,但是他在这个工作上做的并不好,俗话说熟能生巧,他打算 ...
- 【POI 2010】反对称 Antisymmetry
题目: 对于一个 $0/1$ 字符串,如果将这个字符串 $0$ 和 $1$ 取反后,再将整个串反过来和原串一样,就称作「反对称」字符串.比如 $00001111$ 和 $010101$ 就是反对称的, ...
- 【POI 2010】 Pilots
[题目链接] 点击打开链接 [算法] 单调队列 [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 3000010 ...
- [ POI 2010 ] Antisymmetry
\(\\\) \(Description\) 给出一个长度为 \(N\) 的二进制串,定义一个子串是优秀的,当且仅当其正着看,和倒着按位取反后看结果是一样的,求整个串有多少个优秀的子串. \(N\le ...
- 【POI 2010】 Antisymmetry
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2084 [算法] manacher [代码] #include<bits/std ...
- bzoj 2093 [ Poi 2010 ] Frog —— 滑动窗口 + 倍增
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2093 先处理出每个点第一次会跳到哪里: 开一个长度为 K+1 的窗口(因为第一近的实际是自己 ...
- 「POI 2010」Bridges
题目链接 戳我 \(Solution\) 看到"最大值最小",就知道应该要二分 二分之后,对于每个\(mid\),只要计算小于\(mid\)的边,然后在剩下的图中判断有无欧拉回路 ...
- Solution -「POI 2010」「洛谷 P3511」MOS-Bridges
\(\mathcal{Description}\) Link.(洛谷上这翻译真的一言难尽呐. 给定一个 \(n\) 个点 \(m\) 条边的无向图,一条边 \((u,v,a,b)\) 表示从 ...
- POI题解整合
我也不知道为啥我就想把POI的题全都放到一篇blog里写完. POI 2005 SAM-Toy Cars 贪心,每次选下次出现最晚的. POI 2006 KRA-The Disks 箱子位置单调,所以 ...
随机推荐
- Tomcat源码学习(3)—— Digester介绍
Digester方法详解: 通读Digester之前先分析下他的结构: 1.1该类继承了方法DefaultHandler2,DefaultHandler2继承了DefaultHandler是和sax解 ...
- 简介make命令和makefile文件
一.为什么要用到 make 命令和 makefile 文件 在 Linux 下编写一个程序,每次编译都需要在命令行一行一行的敲命令.如果是一个很小的程序还好说,命令不怎的复杂,编译速度也挺快,但是对于 ...
- [Github] Github使用教程
前言 Github是一个面向开源及私有软件项目的托管平台.它可以免费使用,并且速度快速,拥有超多的用户.是目前管理软件开发和发现已有代码的首选平台.下面将向Github新手介绍相关操作. 正文 注册 ...
- 笨办法学Python - 习题8-10: Printing & Printing, Printing
目录 1.习题 8: 打印,打印 2.习题 9: 打印,打印,打印 3.习题 10: 那是什么? 3.1.转义序列: 4.习题总结: 1.习题 8: 打印,打印 学习目标:继续学习 %r 的格式化输出 ...
- Vs2012 编写代码规则
FxCop编写规则 VS2012 下更方便,所需的DLL在: D:\Program Files (x86)\Microsoft Visual Studio 11.0\Team Tools\Static ...
- My Sql数据库设置环境变量和字符集
一.踩坑背景 之前开发中一直用的是sql server 数据库,最近接到公司一个老的项目,用的my sql数据库做的,功能做了一大部分,现在客户要求对原程序和数据库进行服务器的迁移工作.产品经理给出 ...
- 第二次作业<1>
1001.A+B Format (20) ac代码 1. 解题思路 先求和,再输出. 答案区间为-2,000,000至2,000,000,将答案分为三个区段分类讨论.虽然觉得很烦但是想不出更好的方法. ...
- Delphi中BCD和Currency类型
用了这些年的Delphi,竟然对Currency及TBCDField一知半解,下文给了很好的讲解,值得一读. 一. BCD类型 BCD即Binary-Coded Decimal?,在Del ...
- E-commerce 中促销系统的设计
在电商平台中,促销是必不可少的营销手段,尤其在国内 各种玩法层出不穷,最开始的满减/秒杀 到优惠卷 再到 拼团/砍价等等 一个良好的促销系统应该具备易于扩展,易于统计促销效果等特点,在遇到秒杀类促销时 ...
- 微信小程序 功能函数 密码验证*
//登录输入密码 userPasswordInput: function (e) { var that = this; this.setData({ userPassword: e.detail.va ...