Description

问把n截成每个长度后不同子串个数.

Sol

调和极数+Hash.

首先这是一个式子 \(n\sum_{i=1}^n \frac {1}{i}\) .

这东西就是调和极数再乘上 \(n\) ,他趋近于\(nlnn\)

正反哈希一下.

Code

/**************************************************************
Problem: 2081
User: BeiYu
Language: C++
Result: Accepted
Time:6420 ms
Memory:58552 kb
****************************************************************/ #include <bits/stdc++.h>
using namespace std; #define debug(a) cout<<#a<<"="<<a<<" " typedef long long LL;
const int N = 2e5+50;
const LL bs = 666671;
const LL p = 5831801; LL n,ans,ans1;
LL a[N],b[N],rb[N],v[2][N];
vector< int > as; struct HashTable {
int h[p],nxt[p],cnt;
int q[N],t;
LL v[N]; void insert(LL x,LL val) {
v[++cnt]=val,nxt[cnt]=h[x],h[x]=cnt;
q[++t]=x;
}
LL find(LL x,LL val) {
for(int i=h[x];i;i=nxt[i]) if(v[i]==val) return 1;
return -1;
}
void clear() {
for(int i=1;i<=t;i++) h[q[i]]=0;
cnt=0,t=0;
}
}hh; inline LL in(LL x=0,char ch=getchar()) { while(ch>'9' || ch<'0') ch=getchar();
while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();return x; }
inline LL Pow(LL a,LL b,LL r=1) { for(;b;b>>=1,a=a*a%p) if(b&1) r=r*a%p;return r; }
LL GetVal(int kd,LL l,LL r) {
if(!kd) return (v[kd][r]-v[kd][l-1]+p)%p*rb[l-1]%p;
else return (v[kd][l]-v[kd][r+1]+p)%p*rb[n-r]%p;
}
int main() {
n=in();
for(int i=1;i<=n;i++) a[i]=in();
b[0]=b[1]=1;for(int i=2;i<=n;i++) b[i]=b[i-1]*bs%p;
rb[0]=1,rb[1]=Pow(bs,p-2);for(int i=2;i<=n;i++) rb[i]=rb[i-1]*rb[1]%p; for(int i=1;i<=n;i++) v[0][i]=(v[0][i-1]+a[i]*b[i]%p)%p;
for(int i=n;i>=1;i--) v[1][i]=(v[1][i+1]+a[i]*b[n-i+1]%p)%p; for(int i=1;i<=n;i++) {
int r=0;
hh.clear();
// cout<<i<<":"<<endl;
for(int j=1;j+i-1<=n;j+=i) {
LL vv1=GetVal(0,j,j+i-1),vv2=GetVal(1,j,j+i-1);
// debug(vv1),debug(vv2)<<endl; if(vv1>vv2) swap(vv1,vv2);
if(hh.find(vv1,vv2)==-1) hh.insert(vv1,vv2),r++;
}
// debug(r)<<endl;
// cout<<"---------------------"<<endl;
if(r>ans) as.clear(),as.push_back(i),ans=r;
else if(r==ans) as.push_back(i);
}
ans1=as.size();
printf("%lld %lld\n",ans,ans1);
for(int i=0;i<ans1;i++) printf("%d%c",as[i]," \n"[i==ans1-1]);
return 0;
} /*
21
1 1 1 2 2 2 3 3 3 1 2 3 3 1 2 2 1 3 3 2 1
*/

BZOJ 2081: [Poi2010]Beads的更多相关文章

  1. bzoj 2081 [Poi2010]Beads hash+调和级数

    2081: [Poi2010]Beads Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1003  Solved: 334[Submit][Statu ...

  2. 【BZOJ2081】[Poi2010]Beads hash+调和级数

    [BZOJ2081][Poi2010]Beads Description Zxl有一次决定制造一条项链,她以非常便宜的价格买了一长条鲜艳的珊瑚珠子,她现在也有一个机器,能把这条珠子切成很多块(子串), ...

  3. BZOJ 2080: [Poi2010]Railway 双栈排序

    2080: [Poi2010]Railway Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 140  Solved: 35[Submit][Statu ...

  4. BZOJ 2096: [Poi2010]Pilots( set )

    用个set维护就可以水过去...O(NlogN) 应该可以用单调队列O(N).... --------------------------------------------------------- ...

  5. BZOJ 2096([Poi2010]Pilots-单调队列-差值)

    2096: [Poi2010]Pilots Time Limit: 30 Sec   Memory Limit: 162 MB Submit: 190   Solved: 97 [ Submit][ ...

  6. bzoj 2095: [Poi2010]Bridges [混合图欧拉回路]

    2095: [Poi2010]Bridges 二分答案,混合图欧拉路判定 一开始想了一个上下界网络流模型,然后发现不用上下界网络流也可以 对于无向边,强制从\(u \rightarrow v\),计算 ...

  7. BZOJ 2084: [Poi2010]Antisymmetry [Manacher]

    2084: [Poi2010]Antisymmetry Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 609  Solved: 387[Submit] ...

  8. BZOJ 2083: [Poi2010]Intelligence test [vector+二分]

    2083: [Poi2010]Intelligence test Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 469  Solved: 227[Su ...

  9. 【刷题】BZOJ 2096 [Poi2010]Pilots

    Description Tz又耍畸形了!!他要当飞行员,他拿到了一个飞行员测试难度序列,他设定了一个难度差的最大值,在序列中他想找到一个最长的子串,任意两个难度差不会超过他设定的最大值.耍畸形一个人是 ...

随机推荐

  1. EF查询之性能优化技巧

    上一篇:EF使用CodeFirst方式生成数据库&技巧经验 前言 EF相信大部分同学都已经经常使用了,可是你的查询高效吗? 今天我就以个人使用经验来讲讲在使用EF做查询的时候大家都容易忽略的性 ...

  2. haproxy windows环境使用

    haproxy下载:http://pan.baidu.com/s/1miEvQUc 测试环境说明: ip地址 作用 开放端口 备注 nbproc 1 daemon defaults mode tcp ...

  3. 关于#define for if(false);else for

    今日在看一个第三方代码时看到了#define for if(false);else for 这样的一种定义,不明白这样用法的目的,于是查了一下. 这是一个兼容vc6.0的用法,csdn上有这个问题的回 ...

  4. ViewPager实现引导页

    1. 要使用ViewPager,必须要创建 PagerAdapter. 这里创建一个 ViewPagerAdapter来继承PagerAdapter public class ViewPagerAda ...

  5. haproxy利用ACL规则封禁自定义IP地址拒绝访问

    现在有一个需求就是在发版的时候希望除公司IP外的外网访问服务的时候都是拒绝访问的 现在利用haproxy 的acl规则作出限制 errorfile       403 /etc/haproxy/err ...

  6. localStorage使用总结

    一.什么是localStorage.sessionStorage 在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题 ...

  7. SVO原理解析

    最近空闲时间在研究Semi-Direct Monocular Visual Odometry(SVO)[1,2],觉得它值得写一写.另外,SVO的运算量相对较小,我想在手机上尝试实现它. 关于SVO的 ...

  8. bzoj4621: Tc605

    应要求写一下这个题的题解. 我的DP很奥(奇)妙(怪),不过跟标算还是殊途同归的(反正怎么做都行……) 先讲一下奥妙的性质吧. 首先,在最终序列中,每个数最多出现一段,并且,对于出现的数,每段数两两之 ...

  9. 【Android群英传】学习笔记(三·一)

    本篇笔记中,笔者将记录在ListView的使用的技巧 虽然5.X时代,RecyclerView在很多地方都在逐渐取代ListView,但ListView的使用范围还是很广泛的,它这万年老大哥的地位也不 ...

  10. UVa11427 Expect the Expected

    数学期望 概率递推 每一天的概率都是独立且相同的.可以先推出每天打i盘赢j盘的概率f[i][j] f[i][j]=f[i-1][j]*(1-p) + f[i-1][j-1]*p 输 赢 设此人打一天胜 ...