题意:

翻转是指其中一段长度为k的子串全部翻转

n<=200000 a[i]<=n

思路:枚举k,直接哈希判充即可

时间复杂度是n/i求和,根据定理可得是O(n log n)级别的

单哈双哈都可能被卡,我用的是单哈+哈希表判重

 const mo=;
var h1,h2,mi,c,a,head,vet,next:array[..]of longint;
n,i,p,j,st,ed,t1,t2,t3,l,ans,tot:longint; function hash1(x,y:longint):longint;
begin
hash1:=(h1[y]-int64(h1[x-])*mi[y-x+] mod mo) mod mo;
hash1:=(hash1+mo) mod mo;
end; function hash2(x,y:longint):longint;
begin
hash2:=(h2[y]-int64(h2[x-])*mi[y-x+] mod mo) mod mo;
hash2:=(hash2+mo) mod mo;
end; procedure swap(var x,y:longint);
var t:longint;
begin
t:=x; x:=y; y:=t;
end; procedure add(a,b:longint);
begin
inc(tot);
next[tot]:=head[a];
vet[tot]:=b;
head[a]:=tot;
end; function judge(u,x:longint):boolean;
var e,v:longint;
begin
e:=head[u];
while e<> do
begin
v:=vet[e];
if v=x then exit(false);
e:=next[e];
end;
exit(true);
end; begin
assign(input,'bzoj2081.in'); reset(input);
assign(output,'bzoj2081.out'); rewrite(output);
readln(n);
for i:= to n do read(a[i]);
mi[]:=;
for i:= to n do mi[i]:=int64(mi[i-])* mod mo;
for i:= to n do h1[i]:=(int64(h1[i-])*+a[i]) mod mo;
for i:= to n div do swap(a[i],a[n-i+]);
for i:= to n do h2[i]:=(int64(h2[i-])*+a[i]) mod mo;
for i:= to n do
begin
p:=; tot:=;
for j:= to n div i do
begin
st:=i*(j-)+; ed:=i*j;
t1:=hash1(st,ed); t2:=hash2(n-ed+,n-st+);
t3:=int64(t1)*t2 mod mo;
inc(t3); inc(t1); inc(t2);
if judge(t3,t1) then
begin
inc(p);
add(t3,t1);
add(t3,t2);
end;
end;
if p=ans then begin inc(l); c[l]:=i; end;
if p>ans then
begin
l:=; c[]:=i; ans:=p;
end;
for j:= to n div i do
begin
st:=i*(j-)+; ed:=i*j;
t1:=hash1(st,ed); t2:=hash2(n-ed+,n-st+);
t3:=int64(t1)*t2 mod mo;
inc(t3);
head[t3]:=;
end;
end;
writeln(ans,' ',l);
for i:= to l- do write(c[i],' ');
write(c[l]);
close(input);
close(output);
end.

【BZOJ2081】Beads(哈希表)的更多相关文章

  1. [PHP内核探索]PHP中的哈希表

    在PHP内核中,其中一个很重要的数据结构就是HashTable.我们常用的数组,在内核中就是用HashTable来实现.那么,PHP的HashTable是怎么实现的呢?最近在看HashTable的数据 ...

  2. Java 哈希表运用-LeetCode 1 Two Sum

    Given an array of integers, find two numbers such that they add up to a specific target number. The ...

  3. ELF Format 笔记(十五)—— 符号哈希表

    ilocker:关注 Android 安全(新手) QQ: 2597294287 符号哈希表用于支援符号表的访问,能够提高符号搜索速度. 下表用于解释该哈希表的组织,但该格式并不属于 ELF 规范. ...

  4. Java基础知识笔记(一:修饰词、向量、哈希表)

    一.Java语言的特点(养成经常查看Java在线帮助文档的习惯) (1)简单性:Java语言是在C和C++计算机语言的基础上进行简化和改进的一种新型计算机语言.它去掉了C和C++最难正确应用的指针和最 ...

  5. 什么叫哈希表(Hash Table)

    散列表(也叫哈希表),是根据关键码值直接进行访问的数据结构,也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列函数,存放记录的数组叫做散列表. - 数据结构 ...

  6. 【哈希表】CodeVs1230元素查找

    一.写在前面 哈希表(Hash Table),又称散列表,是一种可以快速处理插入和查询操作的数据结构.哈希表体现着函数映射的思想,它将数据与其存储位置通过某种函数联系起来,其在查询时的高效性也体现在这 ...

  7. openssl lhash 数据结构哈希表

    哈希表是一种数据结构,通过在记录的存储位置和它的关键字之间建立确定的对应关系,来快速查询表中的数据: openssl lhash.h 为我们提供了哈希表OPENSSL_LHASH 的相关接口,我们可以 ...

  8. Berkeley DB的数据存储结构——哈希表(Hash Table)、B树(BTree)、队列(Queue)、记录号(Recno)

    Berkeley DB的数据存储结构 BDB支持四种数据存储结构及相应算法,官方称为访问方法(Access Method),分别是哈希表(Hash Table).B树(BTree).队列(Queue) ...

  9. python数据结构与算法——哈希表

    哈希表 学习笔记 参考翻译自:<复杂性思考> 及对应的online版本:http://greenteapress.com/complexity/html/thinkcomplexity00 ...

随机推荐

  1. GG_Logs 日志类库封装使用说明

    3.6.GG_Logs 日志类库封装使用说明 GG_Logs类库项目,Nuget安装log4net 添加代码配置代码: [assembly: log4net.Config.XmlConfigurato ...

  2. 【Java】3到5年开发常见的Java面试题

    一.Java基础和高级 String类为什么是final的. HashMap的源码,实现原理,底层结构. 反射中,Class.forName和classloader的区别 session和cookie ...

  3. SQL 理论知识总结

    1..如何设计数据库 答:存储信息的大小,每次扩容的大小,冗余 2.SQL Server的两种索引是何形式?索引的作用?索引的优缺点? 答:集聚索引,非聚集索引.提高查询速度.但是会过多的占用磁盘空间 ...

  4. 自定义View(10)*onSizeChanged,onMeasure,onDraw的注意事项及正确写法

    1,onSizeChanged 触发: 当view的第一次分配大小或以后大小改变时的产生的事件. 工作: 计算绘制内容的位置,面积等相关值.避免每次在onDraw中计算了. 注意: 计算时不要忘记pa ...

  5. TCP/IP与Http与socket的关系

    1 理清概念: TCP/IP是一个大的协议族(只不过TCP和IP是super star所以就这么命名了),它包括了: 应用层协议:FTP.HTTP.TELNET.SMTP.DNS(协议): 传输层协议 ...

  6. kafka的server.properties配置文件参考示范(图文详解)(多种方式)

    简单点的,就是 kafka_2.11-0.8.2.2.tgz的3节点集群的下载.安装和配置(图文详解) 但是呢,大家在实际工作中,会一定要去牵扯到调参数和调优问题的.以下,是我给大家分享的kafka的 ...

  7. leetcode343 Integer Break

    思路: 将n不断拆分3出来直至其小于或等于4. 实现: class Solution { public: int integerBreak(int n) { ] = {, , , }; ) retur ...

  8. hdu5122 K.Bro Sorting

    思路: 模拟. 实现: #include <iostream> #include <cstdio> using namespace std; ], n, t; int main ...

  9. Android RecyclerView嵌套EditView实时更新Item数据

    一.场景(例如:购物车) 1.当我们需要以列表样式管理某些数据时,可能需要列表项的某个字段可编辑 2.编辑Item上的某个字段后可能还要更新相关字段的值 二.可能遇到的问题 1.列表滑动导致输入框中的 ...

  10. mac下iterm2 设置笔记

    1.利用brew install zsh 来安装oh my zsh 2.chsh -s /bin/zsh,修改~/.zshrc文件 alias cls='clear' alias ll='ls -l' ...