解题: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 箱子位置单调,所以 ...
随机推荐
- Windows 本地文件搜索神器
Wox: Windows 本地文件搜索神器 下载地址: https://github.com/Wox-launcher/Wox 注: Wox只能搜索C盘下的文件,所以需要结合everything 如果 ...
- Bag类课后作业
20162316 Bag课后作业 下面小标题都是码云链接 实现代码 import java.util.Arrays; public class Bag implements BagInterface ...
- 09慕课网《进击Node.js基础(一)》HTTP-get/request
get是对request封装 可以在后台发起http请求,获取远程资源,更新或者同步远程资源 http.request(options[,callback]) 以下代码灌水失败: var http = ...
- 第二阶段Sprint冲刺会议5
进展:能够保存到手机或内存卡上,没有实现自己选路径,指定路径为内存卡并能够播放已录制好的视频.
- 《Spring1之第六次站立会议》
<第六次站立会议> 昨天:向小伙伴们请教了我代码的错误的解决方法以及对TCP/IP协议进行了相关的了解. 今天:我把自己项目工程里的服务器端界面进行了优化和完善. 遇到的问题:觉得做的界面 ...
- servlet 路径问题
首先明确绝对路径与相对路径,绝对路径:相对于盘符的路径c://a.txt,相对路径格式如/web/hello.jsp.还有一个是网络路径http://www.baidu.com/...... 一般来说 ...
- MAVEN ERROR maven-resources-plugin
maven新建项目时报错 Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin: ...
- HTML和CSS <h1> --1-- <h1>
Html和CSS的关系 学习web前端开发基础技术需要掌握:HTML.CSS.JavaScript语言.下面我们就来了解下这三门技术都是用来实现什么的: 1. HTML是网页内容的载体.内容就是网页制 ...
- SGU 223 little kings BSOJ2772 状压DP
1896 [SCOI2005]互不侵犯King [问题描述]在n*n(1<=n<=10)的棋盘上放k(0<=k<=n*n)个国王(可攻击相邻的8 个格子),求使它们无法互相攻击 ...
- git学习(一) 如何将项目上传到github
用了github有了段时间,但是感觉都是断断续续的,这次花了点时间来总结下,已方便下次忘记的时候拿出来看一下: 自己主要是参考了这个网站来学习的: git教程 -廖雪峰 第一步: 创建github账号 ...