题目链接

摘自https://www.cnblogs.com/wyboooo/p/9829517.html

用KMP先求出以a[i]为结尾的前缀与b匹配的最长长度。
比如 f[i] = j,就表示a[1~i]的后缀最多可以和b[1~j]匹配。但求出这个并不意味着以a[i]为开头的后缀可以和b恰好匹配j位(因为也许后面还可以匹配),但是可以肯定的是他至少可以匹配j位。我们很难求出恰好可以匹配x位的位置有多少,但是我们可以存至少可以匹配x位的位置的数目,结果用cnt[x] - cnt[x +1]就可以了。
因此cnt[f[i]] ++就很显然了。
由于我们之前求出的是最长长度,因此当a[1~i]可以最多和b[1~j]匹配时,也一定存在一个小于j的k使得a[1~i]和b[1~k]匹配,也就是一定能找到一个位置,至少匹配k位,但这个可能我们在之前没有加上过。而这个k恰好就等于nxt[j]。

xjc大佬还提出了一个hash+二分的做法,也能AC。

就是用二分长度+hash check求出每个位置的答案,然后直接用桶记录秒出答案。

时间复杂度\(O(n\log n)\)

#include <cstdio>
#include <cstring>
#define Open(s) freopen(s".in","r",stdin);freopen(s".out","w",stdout);
const int MAXN = 200010;
int nxt[MAXN], n, m, q, f[MAXN], c[MAXN], d;
char a[MAXN], b[MAXN];
int main(){
Open("str");
scanf("%d%d%d%s%s", &n, &m, &q, a + 1, b + 1);
int j = 0;
for(int i = 2; i <= m; ++i){
while(j && b[i] != b[j + 1]) j = nxt[j];
if(b[j + 1] == b[i]) ++j;
nxt[i] = j;
}
j = 0;
for(int i = 1; i <= n; ++i){
while(j && (a[i] != b[j + 1] || j == m)) j = nxt[j];
if(a[i] == b[j + 1]) ++j;
f[i] = j;
}
for(int i = 1; i <= n; ++i)
++c[f[i]];
for(int i = m; i; --i)
c[nxt[i]] += c[i];
for(int i = 1; i <= q; ++i){
scanf("%d", &d);
printf("%d\n", c[d] - c[d + 1]);
}
return 0;
}

最新文章

  1. 【转】SQL 操作类
  2. Java——标签组件:JLabel
  3. ZOJ 3659 &amp; HDU 4424 Conquer a New Region (并查集)
  4. 【Linux】Zabbix + MPM + msmtp + mutt 监控MySQL + 邮件报警
  5. time_t和struct tm之间的转换
  6. java学习之数组(一)【内存】
  7. 14.2.5.5 Change Buffer
  8. Mysql查询优化器浅析
  9. jdk8中的stream
  10. Java Scanner 类
  11. Lucene分词详解
  12. 带查询参数 可分页 的 T-SQL 语句写法
  13. javascript如何操作数组
  14. eureka分区的深入讲解
  15. __slots__用法以及优化
  16. MT【52】空间法向量理解直线条数
  17. spring-IOC容器(二)
  18. Java抽象类应用—模板方法模式
  19. Android开发——Android多进程以及使用场景介绍
  20. Visual Studio 2013 boost

热门文章

  1. MongoDB 高级查询_aggregate聚合管道
  2. 基于Docker部署ETCD集群
  3. 基于Hadoop爬虫网易云歌曲评论
  4. Mac php 装imagick扩展 菜鸟教程
  5. SRS之安装与使用
  6. Spark2.x(五十七):User capacity has reached its maximum limit(用户容量已达到最大限制)
  7. Oracle系列六 分组函数
  8. openresty开发系列32--openresty执行流程之1初始化阶段
  9. Flutter UI系统
  10. Microsoft Office Excel不能访问文件*.xls的解决方案