51nod 1304 字符串的相似度 拓展kmp
来源:互联网 发布:签到软件虚拟定位 编辑:程序博客网 时间:2024/06/11 19:25
题意
我们定义2个字符串的相似度等于两个串的相同前缀的长度。例如 “abc” 同 “abd” 的相似度为2,”aaa” 同 “aaab” 的相似度为3。
给出一个字符串S,计算S同他所有后缀的相似度之和。
1 <= L <= 1000000
分析
看完题后:哈哈哈这不是sa模板题吗。花十分钟敲完后发现居然T了。。。
后来听说是exkmp的模板题,就又跑去学了一发exkmp。
直接把next数组全部加起来就好了。
一开始打exkmp的时候把pos的初值设为了1,然后就变成了大暴力。。。实际上赋为2就可以。
代码
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int N=1000005;int n,next[N];char s[N];void get_next(){ int mx=0,pos=0; next[1]=n; for (int i=2;i<=n;i++) { if (mx>=i) next[i]=min(mx-i+1,next[i-pos+1]); while (i+next[i]<=n&&s[i+next[i]]==s[next[i]+1]) next[i]++; if (i+next[i]-1>mx) mx=i+next[i]-1,pos=i; }}int main(){ scanf("%s",s+1); n=strlen(s+1); get_next(); LL ans=0; for (int i=1;i<=n;i++) ans+=next[i]; printf("%lld",ans); return 0;}
阅读全文
0 0
- 51nod 1304 字符串的相似度 拓展kmp
- [51nod 1304]字符串的相似度
- 51Nod 1304 字符串的相似度
- 51 nod 1304 1304 字符串的相似度(exkmp)
- 51NOD 1277 字符串中的最大值 【拓展KMP】
- 扩展KMP学习、51nod1304 字符串的相似度
- 51nod1304 字符串的相似度(扩展kmp)
- 字符串的相似度
- 字符串的相似度
- 字符串的相似度
- 字符串的相似度
- 字符串的相似度
- 字符串的相似度
- 字符串的相似度
- 字符串的相似度
- 字符串的相似度
- 51nod-1277 字符串中的最大值(KMP)
- kmp-51nod 1277 字符串中的最大值
- 《Discrete Mathematic with Applications》读书笔记三
- com.android.support:appcompat-v7:15.+. Versions do not match解决办法 android studio
- Leetcode-Largest Rectangle in Histogram
- 德才论 (25)
- Redis简介
- 51nod 1304 字符串的相似度 拓展kmp
- 编写简单的消息发布器和订阅器
- Jzoj4896 兔子
- 压力测试工具
- Luogu 3384 树链剖分+线段树
- Linux shell (二)
- neo4j 如何删除所以的节点和关系
- ROC曲线面积计算
- 软件测试基础--使用测试文档