CF 246 div2 D Prefixes and Suffixes (全部前缀的出现次数)
2024-10-01 18:48:52
题目链接:http://codeforces.com/contest/432/problem/D
题意:对一个长度不超过10^5的字符串。按长度输出和后缀全然匹配的的前缀的长度,及该前缀在整个串中出现的次数。(可重叠)
#include <cstdio>
#include <cstring> const int N=100005; char str[N];
int next[N],cnt[N],ansp[N],ansn[N],n; void getNext (char s[],int len)
{
next[0]=-1;
int i=0,j=-1;
while (i<len)
{
if (j==-1 || s[i]==s[j])
next[++i]=++j;
else j=next[j];
}
} void KMP ()
{
int i=0,j=0;
while (i<n)
if (j == -1 || str[i] == str[j])
i++,j++,cnt[j]++;
else
j=next[j]; for (i=n;i>0;i--) //统计每一个前缀出现次数,cnt[i]表示长度为i的前缀出现了cnt[i]次
if (next[i] != -1)
cnt[next[i]] += cnt[i];
} int main ()
{
scanf("%s",str);
n=strlen(str);
memset(cnt,0,sizeof(cnt));
getNext(str,n);
KMP();
int t=n,sum=0;
while (t) //前缀匹配后缀
{
ansp[sum]=t;
ansn[sum++]=cnt[t]; //
t=next[t];
}
printf("%d\n",sum);
for (int i=sum-1;i>=0;i--)
printf("%d %d\n",ansp[i],ansn[i]);
return 0;
}
最新文章
- C#中的问号
- [LeetCode][Java]Triangle@LeetCode
- 《你必须知道的.NET》读书笔记:从Hello World认识IL
- 编译原理(简单自动词法分析器LEX)
- javascript - DOM对象控制HTML元素详解
- 解决Apache CXF 不支持传递java.sql.Timestamp和java.util.HashMap类型问题
- Sqli-labs less 28
- Ogre Addon之Paged Geometry
- makefile教程网址
- Java基础知识强化之集合框架笔记26:LinkedList的特有功能
- android 接听和挂断实现方式
- mysql用户和权限管理
- LightOJ 1338 &;&; 1387 - Setu &;&; LightOJ 1433 &;&; CodeForces 246B(水题)
- poj 2965
- MEF初体验之三:Exports声明
- 关于分布式锁原理的一些学习与思考-redis分布式锁,zookeeper分布式锁
- 一张脑图说清 Nginx 的主流程
- Github: 从github上拉取别人的源码,并推送到自己的github仓库
- python之log
- Go语言规格说明书 之 通道类型(Channel types)
热门文章
- border:none与border:0的区别
- Android项目实战(四十四):浅谈Postman (网络请求调试插件)
- Android控件postDelayed用法,View自带的定时器
- IHttpHandler的学习(0)
- <;Sicily>; Longest Common Subsequence
- Linux下安装使用MySQL
- [转载]CentOS 7虚拟机下设置固定IP详解
- vuex 闲置状态重置方案
- CSU 1364 Interview RMQ
- Apache CXF实战之二 集成Sping与Web容器