bzoj2119 股市的预测
2024-10-19 14:43:16
感觉智商莫名其妙的就变低了……写这题的时候死活想不出来……
做法其实不难……
题目要求形如ABA的串的个数,我们可以枚举A的长度,利用标记关键点的方法统计答案。设枚举到的答案为k,每k个点标记一个关键点,显然每个A只会恰好包含一个关键点,那么我们枚举每个关键点$i$,求一下它和$i+m+l$前后各能匹配到哪儿,显然答案应该加上能匹配的长度。注意为了防止重复计算需要把LCP和LCS(最长公共后缀)对$k$取min。
求LCP和LCS我是用hash写的,一开始base选的2147483647然后WA了,换成123456789和233333333倒是都能过……什么鬼……
/**************************************************************
Problem: 2119
User: hzoier
Language: C++
Result: Accepted
Time:3664 ms
Memory:1800 kb
****************************************************************/
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=;
const unsigned long long base=233333333ll;
unsigned long long gethash(int,int);
int LCP(int,int);
int LCS(int,int);
unsigned long long h[maxn],pw[maxn];
long long ans=;
int n,m,a[maxn];
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<n;i++)scanf("%d",&a[i]);
for(int i=n;i;i--)a[i]-=a[i-];
n--;
for(int i=n;i;i--)h[i]=h[i+]*base+a[i]+base+1ull;
pw[]=;
for(int i=;i<=n;i++)pw[i]=pw[i-]*base;
for(int l=;m+(l<<)<=n;l++){
for(int i=l;i+m+l<=n;i+=l){
int tmpa=min(LCS(i,i+m+l),l),tmpb=min(LCP(i,i+m+l),l);
if(tmpa+tmpb>l)ans+=tmpa+tmpb-l;
}
}
printf("%lld",ans);
return ;
}
inline unsigned long long gethash(int x,int l){return h[x]-h[x+l]*pw[l];}
int LCP(int x,int y){
if(x>y)swap(x,y);
int L=,R=n-y+;
while(L<=R){
int M=(L+R)>>;
if(gethash(x,M)==gethash(y,M))L=M+;
else R=M-;
}
return R;
}
int LCS(int x,int y){
if(x>y)swap(x,y);
int L=,R=x;
while(L<=R){
int M=(L+R)>>;
if(gethash(x-M+,M)==gethash(y-M+,M))L=M+;
else R=M-;
}
return R;
}
最新文章
- 一起学微软Power BI系列-使用技巧(2)连接Excel数据源错误解决方法
- apache-shiro入门<;一>;
- Spark Streaming源码解读之Driver容错安全性
- 手持扫描打印终端POS机应用商场零售批发移动销售开单
- 清橙 A1206 小Z的袜子(莫队算法)
- fatal error C1854: 无法覆盖在创建对象文件.obj”的预编译头过程中形成的信息
- HTML5/jQuery动画应用 3D视觉效果
- bzoj1054: [HAOI2008]移动玩具
- Tomcat 的三种(bio,nio.apr) 高级 Connector 运行模式
- CCNP路由实验(1) -- EIGRP
- MFC 刷新失效的Picture控件
- IP命令
- c oth
- 微信小程序内联h5页面,实现分享
- django之model多表操作
- 详细理解平衡二叉树AVL与Python实现
- 004_加速国内docker源下载速度
- 多线程的使用:只能用cmd来玩不能用idle
- Necklace
- 自定义View中的Path