传送门

感觉智商莫名其妙的就变低了……写这题的时候死活想不出来……

做法其实不难……

题目要求形如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;
}

最新文章

  1. 一起学微软Power BI系列-使用技巧(2)连接Excel数据源错误解决方法
  2. apache-shiro入门&lt;一&gt;
  3. Spark Streaming源码解读之Driver容错安全性
  4. 手持扫描打印终端POS机应用商场零售批发移动销售开单
  5. 清橙 A1206 小Z的袜子(莫队算法)
  6. fatal error C1854: 无法覆盖在创建对象文件.obj”的预编译头过程中形成的信息
  7. HTML5/jQuery动画应用 3D视觉效果
  8. bzoj1054: [HAOI2008]移动玩具
  9. Tomcat 的三种(bio,nio.apr) 高级 Connector 运行模式
  10. CCNP路由实验(1) -- EIGRP
  11. MFC 刷新失效的Picture控件
  12. IP命令
  13. c oth
  14. 微信小程序内联h5页面,实现分享
  15. django之model多表操作
  16. 详细理解平衡二叉树AVL与Python实现
  17. 004_加速国内docker源下载速度
  18. 多线程的使用:只能用cmd来玩不能用idle
  19. Necklace
  20. 自定义View中的Path

热门文章

  1. Oracle中-事务-序列-视图-数据类型笔记
  2. MODBUS协议相关代码(CRC验证 客户端程序)
  3. 牛客 Wannafly挑战赛27 D 绿魔法师
  4. Q438 找到字符串中所有字母异位词
  5. CentOS&amp;.NET Core初试系列
  6. C# DataTable 用法
  7. C#几种常用的加密方式
  8. 封装element-ui的dialog组件
  9. java websocket client
  10. wDatepicker97的用法(点击事件联动)