题目链接: 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;
}

最新文章

  1. js的client详解
  2. noi题库(noi.openjudge.cn) 1.5编程基础之循环控制T36——T45
  3. 最新《App Store审核指南》翻译
  4. Kafka的配置文件详细描述
  5. Javascript-XMLHttpRequest对象简介
  6. 求职(2015南京站获得百度、美的集团、趋势科技、华为offer)
  7. Linux学习之more命令
  8. iOS 如何自定义NavigationBar的高度
  9. Java程序猿面试题集(181- 199)
  10. 布局神器display:flex
  11. Java之List排序出错
  12. springboot + mybatis 前后端分离项目的搭建 适合在学习中的大学生
  13. SmartSql V3 重磅发布
  14. Tokyo Tyrant(TTServer)系列(一)-介绍和安装
  15. 07-部署Flanneld网络
  16. LoadRuner12.53教程(二)
  17. bootstrap 通过js代码创建和关闭插件
  18. shell黑名单
  19. Git查看与修改用户名、邮箱(转载)
  20. 【转】WebService 的创建,部署和使用

热门文章

  1. bookstrap form表单简单-smart-form
  2. NOI.AC #31. MST
  3. 【POJ 3263】 Tallest Cow
  4. 第二周 Leetcode 493. Reverse Pairs(HARD)
  5. SQL Server 数据字典生成脚本
  6. (function(){})();和(function(){}())每个括号的用途和区别
  7. CF1073C Vasya and Robot
  8. Android Jetpack - 使用 Navigation 管理页面跳转
  9. centos源更新
  10. c++ 四种类型转换机制