Codeforces 432D Prefixes and Suffixes (KMP、后缀数组)
题目链接: https://codeforces.com/contest/432/problem/D
题解:
做法一: KMP
显然next树上\(n\)的所有祖先都是答案,出现次数为next树子树大小。
做法二: 后缀数组/Z-box
按照height分组,二分查找即可。
这种题经常KMP和Z-box都能做。
另外哪位神犇教我一下扩展KMP和Z-box有啥区别。
代码
KMP:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<vector>
#include<utility>
using namespace std;const int N = 1e5;
char a[N+3];
int nxt[N+3];
int sz[N+3];
vector<pair<int,int> > ans;
int n;void KMP()
{nxt[0] = nxt[1] = 0;for(int i=2; i<=n; i++){nxt[i] = nxt[i-1];while(nxt[i] && a[nxt[i]+1]!=a[i]){nxt[i] = nxt[nxt[i]];}if(a[nxt[i]+1]==a[i]) nxt[i]++;}
}int main()
{scanf("%s",a+1); n = strlen(a+1);for(int i=1; i<n+1-i; i++) swap(a[i],a[n+1-i]);KMP();for(int i=1; i<=n; i++) sz[i] = 1;for(int i=n; i>=1; i--) sz[nxt[i]] += sz[i];for(int i=n; i>0; i=nxt[i]){ans.push_back(make_pair(i,sz[i]));}printf("%d\n",ans.size());for(int i=ans.size()-1; i>=0; i--) printf("%d %d\n",ans[i].first,ans[i].second);return 0;
}
Codeforces 432D Prefixes and Suffixes (KMP、后缀数组)相关推荐
- Codeforces 432D Prefixes and Suffixes(KMP+dp)
题目连接:Codeforces 432D Prefixes and Suffixes 题目大意:给出一个字符串,求全部既是前缀串又是后缀串的字符串出现了几次. 解题思路:依据性质能够依据KMP算法求出 ...
- CodeForces - 432D Prefixes and Suffixes(KMP的next数组性质)
题目链接:点击查看 题目大意:给出一个字符串,求满足条件的所有子字符串在主串中出现的次数,条件就是当前子字符串在主串中既是前缀也是后缀 题目分析:因为今天小冰给我讲了一个与next数组配合的dp,也就 ...
- codeforces D Prefixes and Suffixes(kmp)
先计算前缀函数,统计cnt[pi[i]]的个数,然后根据前缀前缀的迭代关系,即pi[pi[i] - 1],统计其个数,最后计算前缀自身. 代码参考: https://github.com/wuli24 ...
- Codeforces Round #246 (Div. 2) D. Prefixes and Suffixes kmp + dp
传送门 文章目录 题意: 思路: 题意: 思路: 通过完美子串的定义,我们不难发现满足条件的子串就是kmpkmpkmp中ne[n]ne[n]ne[n]不断向前跳得到的串,现在问题就是如何求这些前缀串在 ...
- POJ3080方法很多(暴力,KMP,后缀数组,DP)
题意: 给n个串(n>=2&&n<=10),每个串长度都是60,然后问所有串的最长公共子串,如果答案不唯一输出字典序最小的. 思路:直接暴力,枚举+KMP,后缀 ...
- 2019年秦皇岛J题:MUV LUV EXTRA(KMP后缀数组)
Problem Description 鉴纯夏是一名成绩不太好的高中生.一天她在数学考试中碰到了一道求某条线段长度的问题.因为她并不会做这道题,所以她准确地作图后用尺子量出了这条线段的长度.不幸的是, ...
- HDU - 4552 怪盗基德的挑战书(后缀数组+RMQ/KMP+dp)
题目链接:点击查看 题目大意:给出一个字符串,统计每个前缀在字符串中出现的次数之和 题目分析:可以直接先用后缀数组跑出来height,再用RMQ跑出来任意两个后缀的height,我们可以将题意转换为求 ...
- Codeforces Good Bye 2015 D. New Year and Ancient Prophecy 后缀数组 树状数组 dp
D. New Year and Ancient Prophecy 题目连接: http://www.codeforces.com/contest/611/problem/C Description L ...
- 字符串相关处理kmp,前缀数,后缀树,后缀数组,最长回文串,最长重复字串,最长非重复字串
1. 最长回文串 一般用后缀数组或者后缀树可以解决, 用此方法:http://blog.csdn.net/v_july_v/article/details/6897097 预处理后缀树,使得查询LCA ...
最新文章
- 使用ajaxfileupload.js实现文件上传
- database disk image is malformed 问题解决
- linux查看日志命令_查看log日志基础命令
- 【实践案例】Databricks 数据洞察在美的暖通与楼宇的应用实践
- linux基线核查脚本
- 深入理解php 匿名函数和 Closure
- c语言程序设计 a b,用C语言编程时,a+=b 和 a=a+b 真的完全等价吗?
- 最擅长玩《毁灭战士》的AI开源了 | 来自CMU的论文代码
- vue 多个组件动态加载(动态组件的使用)
- nrg文件是什么?nrg文件格式详细介绍
- unb计算机科学,【加拿大新布伦瑞克大学】加拿大UNB_University of New Brunswick - 加拿大大学 - 加拿大留学云...
- 道德经和译文_老子《道德经》全文解析及通俗译文
- 重返设计模式--命令模式
- echarts将x轴展示在图标上方
- 梭杆菌(Fusobacterium)——共生菌,机会菌,癌杆菌
- c++《AVL树的概念》《AVL树的插入》《AVL树的旋转》《AVL树的验证》《AVL树的删除》《AVL树的性能》
- 游戏设计的艺术:一本透镜的书——第十五章 其中一种体验是故事
- Ubuntu 16.04下载编译Android11源码
- 下列不是用于制作计算机动画,计算机应用基础动画制作软件_2019答案章节答案期末答案...
- 作为技术人,如何突破自己的技术瓶颈,从而提高自己的核心竞争力
热门文章
- mysql replace into 使用过程中报错
- Gateway配合sentinel自定义限流_你知道如何使用阿里Sentinel实现接口限流吗?
- 国外程序员整理的 C++ 资源大全 (zt)
- 常用的渗透测试工具SQLMap
- android 始终显示overflow菜单
- 操作系统(六)系统调用
- 日常生活小技巧 -- 重装win10系统
- Mysql:Sql的执行顺序
- zcmu-1644 多连块拼图
- 【译】Federated Learning: Bringing Machine Learning to the edge with Kotlin and Android