[POI2010]Beads
2024-09-04 01:41:03
题目大意:
给定一个长度为$n(n\leq200000)$的串$S_{1\sim n}$,选择一个$l$,从$S_1$开始,将$S$分为连续的若干段,使得每一段长度为$l$。令$k$为分出来不同的子串个数(翻转后相同算作相同),求最大的$k$,以及有哪些$l$对应的答案为$k$。
思路:
枚举长度,求正反两个哈希去重。
#include<set>
#include<cstdio>
#include<cctype>
#include<vector>
typedef unsigned long long uint64;
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
const int N=,BASE=;
int a[N];
uint64 pow[N],h1[N],h2[N];
std::set<uint64> set;
std::vector<int> v;
inline uint64 hash1(const int &l,const int &r) {
return h1[r]-h1[l-]*pow[r-l+];
}
inline uint64 hash2(const int &l,const int &r) {
return h2[l]-h2[r+]*pow[r-l+];
}
int main() {
const int n=getint();
for(register int i=;i<=n;i++) a[i]=getint();
for(register int i=;i<=n;i++) h1[i]=h1[i-]*BASE+a[i];
for(register int i=n;i>=;i--) h2[i]=h2[i+]*BASE+a[i];
for(register int i=pow[]=;i<=n;i++) pow[i]=pow[i-]*BASE;
int ans=;
for(register int i=;ans*i<=n;i++) {
set.clear();
int tmp=;
for(register int j=;i+j-<=n;j+=i) {
const int h1=hash1(j,j+i-),h2=hash2(j,j+i-);
if(!set.count(h1)||!set.count(h2)) {
set.insert(h1),set.insert(h2);
tmp++;
}
}
if(tmp>ans) {
ans=tmp;
v.clear();
}
if(tmp==ans) v.push_back(i);
}
printf("%d %lu\n",ans,v.size());
for(register unsigned i=;i<v.size();i++) {
printf("%d%c",v[i]," \n"[i==v.size()-]);
}
return ;
}
最新文章
- 解决不能访问远程mysql的问题
- codevs 1432 总数统计
- LoadRunner 脚本学习 -- 读取文件内容
- Linux资源监控命令/工具(调试)
- C++ 使用Htmlcxx解析Html内容(VS编译库文件)
- C#创建Excel文件并将数据导出到Excel文件
- 很反感Java Web 三层框架
- async: false的应用.
- java学习——集合框架(泛型,Map)
- LVM 详解
- Java并发编程实战 之 线程安全性
- 神经网络(BP)算法Python实现及简单应用
- Java多线程(八)——join()
- [转]TSVNCache.exe卡死电脑的解决方法
- 代码统计工具-cloc
- 从svn下载项目,并在tomcat启动
- 单例模式多线程安全写法(double-lock-check)
- Structs复习 字符编码问题
- Python2.7-functools
- db2时间函数
热门文章
- java 继承小结
- CyclicBarrier和CountDownLatch的使用
- HDU 3033 组合背包变形 I love sneakers!
- ocrosoft Contest1316 - 信奥编程之路~~~~~第三关 问题 C: 挂盐水
- 浅谈数据库系统中的cache(转)
- MapReduce架构
- 【bzoj2079】[Poi2010]Guilds 构造结论题
- 如何得到一个接口所有的实现类(及子接口)?例如:Eclipse IDE
- Educational Codeforces Round 2 B. Queries about less or equal elements
- oracle修改数据遇到的坑