[BZOJ1511][POI2006]OKR-Periods of Words(kmp+dp)
来源:互联网 发布:廉价机票 知乎 编辑:程序博客网 时间:2024/04/29 08:08
题目描述
传送门
题解
题目要求求除了其本身的最长循环节,实际上就是要求非0的最短失配。
但是如果直接求最短失配的话,应该在求出最长失配的基础上暴力向前蹦,这样的话时间承受不了。那么可以转化一下思路,最长循环节是有递推关系的,即f(i)+=f(T(i))+(i-T(i)),T为失配函数。这样的话时间就可以做到
代码
#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 1000005#define LL long longint n,T[N];char s[N];LL f[N],ans;void calc_T(){ T[0]=-1; for (int i=0;i<n;++i) { int j=T[i]; while (j!=-1&&s[i]!=s[j]) j=T[j]; T[i+1]=++j; }}int main(){ scanf("%d\n",&n); gets(s); calc_T(); for (int i=1;i<=n;++i) if (T[i]) { f[i]+=f[T[i]]+((LL)i-(LL)T[i]); ans+=f[i]; } printf("%lld\n",ans);}
总结
①kmp的失配可以与dp(还有树结构)联系起来!这一点以后要注意!
0 0
- [BZOJ1511][POI2006]OKR-Periods of Words(kmp+dp)
- BZOJ1511 [POI2006]OKR-Periods of Words
- bzoj1511: [POI2006]OKR-Periods of Words
- bzoj 1511: [POI2006]OKR-Periods of Words (kmp+乱搞)
- BZOJ 1511 [POI2006]OKR-Periods of Words KMP
- BZOZ 1511: [POI2006]OKR-Periods of Words KMP
- 【bzoj 1511】[POI2006]OKR-Periods of Words(kmp+递推)
- CodeForces 314 B.Sereja and Periods(dp)
- BZOJ 1442: [Poi2006]Crystal dp
- OKR
- UVA10081 - Tight Words(dp)
- UVA10081 Tight Words(dp)
- hdu3336(KMP+DP)
- hdu3689(kmp+dp)
- hdu3336(KMP+DP)
- hdu3336(kmp+dp)
- zoj3587(kmp+dp)
- [BZOJ1511]火车票
- C++继承与派生
- 268. Missing Number
- PHP fsockopen异步调用出现不执行的问题
- Faster RCNN安装问题
- 欢迎使用CSDN-markdown编辑器
- [BZOJ1511][POI2006]OKR-Periods of Words(kmp+dp)
- 网络通信2:TCP的函数
- hdu 2073 无限的路
- Android 自定义View 视频音量调控
- Java内存泄露原因详解
- 想拥有自己的 Atom 文本编辑器插件吗?
- 关于com.mchange.v2.c3p0.DriverManagerDataSource ensureDriverLoaded的一个错误原因
- ListView嵌套GridView发生冲突怎么办
- 10044---基于Flume的美团日志收集系统(一)架构和设计