解题: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 箱子位置单调,所以 ...
随机推荐
- 半年收入超2亿RMB 独立游戏开发者的艰苦创业路
一款叫做<监狱建筑师>的模拟经营游戏,目前在Steam平台获得了3000万美元(近2亿元)以上的收入.这款游戏由英国独立工作室Introversion Software发布,而团队最困难的 ...
- c++ 整数和字符串的转化
一.string转int的方式 采用最原始的string, 然后按照十进制的特点进行算术运算得到int,但是这种方式太麻烦,这里不介绍了. 采用标准库中atoi函数. "; int a = ...
- 时间戳使用的bug,你见过么
博主本人前几天给公司项目里写了个禁言和解除禁言的功能,项目中涉及到对时间的处理,因为学得时候也没很注意,就按自己的思路去写了,运行起来发现了一个天大的bug,就是写的延后一年尽然,刚开始就执行了,而且 ...
- centos下设置自启动和配置环境变量的方法
1. 设置自启动 在CentOS系统下,主要有两种方法设置自己安装的程序开机启动.1.把启动程序的命令添加到/etc/rc.d/rc.local文件中,比如下面的是设置开机启动httpd. #!/bi ...
- 【探路者】final贡献分配
[探路者]组成员及各位博客地址. 1蔺依铭:http://www.cnblogs.com/linym762/ 2张恩聚:http://www.cnblogs.com/zej87/ 3米赫:http: ...
- TeamWork#3,Week5,Performance Test of Crawlers
爬虫总体性能不错,能完成基本的网络数据爬取,没有功能上的缺陷.下图为饿了么网站商户信息爬取结果及原网站信息. 大部分信息是正确的,但也有一些错误.比如下图,小渝馆家常菜和渝码头川菜位置爬取错了. 再比 ...
- Daily Scrumming* 2015.10.26(Day 7)
一.总体情况总结 今天我们开会具体讨论了一下接下来的任务.还详细讨论了一下分数的分配,具体分数分配我们会在下一篇博客中详细说明. 我们下一周大致的工作安排如下: 1.UI:完成社团后台界面的设计,以及 ...
- 20135234mqy 实验三:敏捷开发与XP实践
实 验 报 告 课程:Java 班级: 1352 姓名:mqy 学号:20135234 成绩: 指导教师:娄嘉鹏 实验日期:2015. ...
- iOS开发学习-给圆形图片添加边框
imageView.layer.cornerRadius = imageView.bounds.size.width * 0.5;// 设置圆角刚好是自身宽度的一半,就刚好是圆形 imageView. ...
- object-oriented first work
前言:在星期三的第一次面向对象程序设计课,遇见我们的栋哥,初次见面,发现老师的幽默.....下课后,就给我们一道作业题目... 作业要求:Create a program that asks for ...