描述 Description

给你两个串A,B,可以得到从A的任意位开始的子串和B匹配的长度。
给定K个询问,对于每个询问给定一个x,求出匹配长度恰为x的位置有多少个。
N,M,K<=200000

输入格式 Input Format

第一行三个数 N,M,K,表示A的长度、B的长度和询问数。
第二行为串A。
第三行为串B。
接下来K行,每行1个数X。

输出格式 Output Format

对于每个询问输出一个数。

分析:

      需要处理的问题有:

1.需要的是长度恰好为x的,而不是可以达到x的

      2.kmp中一些没有匹配过的字符的处理。如 aba和ab,就不会有从aba中的b开始匹配的时候

对于问题1,可以只记录能匹配x长度的数量(数组q),而恰好匹配x的值就是q[x]-q[x+1]

对于问题2,可以应用p数组(next),如果第i个长度可以匹配,那么p[i]也可以匹配,所以把ans[i]的值加到ans[p[i]]上

code

program haha;
vara,b       : ansistring;p,ans,q   : array[0..200002] of longint;i,j,m,n,k : longint;
procedure init;
beginreadln(n,m,k);readln(a);readln(b);j:=0;for i:=2 to m dobeginwhile (j>0) and (b[j+1]<>b[i]) do j:=p[j];if b[j+1]=b[i] theninc(j);p[i]:=j;end;
end; { init }
procedure work;
varK : longint;
beginj:=0;for i:=1 to n dobeginwhile (j>0) and (b[j+1]<>a[i]) doj:=p[j];if b[j+1]=a[i] theninc(j);if j=m thenj:=p[j];q[i]:=j;//记录主串中在匹配串中匹配的长度end;for i:=1 to n doinc(ans[q[i]]);for i:=m downto 1 doinc(ans[p[i]],ans[i]);
end; { work }
beginassign(input,'sdf.in'); reset(input);//assign(output,'sdf.out'); rewrite(output);init;work;for I:=1 to k dobeginreadln(n);writeln(ans[n]-ans[n+1]);end;close(input);close(output);
end.

转载于:https://www.cnblogs.com/GreenJ/archive/2012/03/29/2422923.html

tyvj 1068 STR相关推荐

  1. 踩坑中:TypeError: unsupported operand type(s) for /: 'str' and 'int'

    在网上查看了很多博客,首先从报错提示来讲TypeError: unsupported operand type(s) for /: 'str' and 'int',明确了是类型错误:不支持操作类型为整 ...

  2. Ubuntu16.04 pip3 install 报错 working_set.find(moduleOrReq) or require(str(moduleOrReq))[0]

    1. 问题现象 Exception: Traceback (most recent call last):File "/usr/lib/python3/dist-packages/pip/b ...

  3. python中什么是字符举例说明_第20p,什么是字符串?Python中的str

    原标题:第20p,什么是字符串?Python中的str 大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第20篇文章,第二阶段的课程:Python基础知识:Python的字符串(上 ...

  4. TypeError: can only concatenate str (not “float“) to str

    处错原因如下 就是print 的地方报错了,类型不一样引起的问题 处理这个问题有2种方法 方法1: 转换类型 pi = 3.14 print("当前的p=" + str(pi)) ...

  5. TypeError: can only concatenate str (not “int“) to str

    出现问题原因如下 报错的地方告诉我了print 的地方报错了 类型不一样引起的问题 处理这个问题有2种方法 方法1: 转换类型 pi = 3 print("当前的p=" + str ...

  6. TypeError: cannot concatenate ‘str‘ and ‘list‘ objects

    如下面的内容运行就会报错 list_a =[1, 2, 3, 4, 5] for i in list_a:print ("i的值为:"+i) 报错如下 处理方法把int 类型转为s ...

  7. 浅析Python中bytes和str区别

    本博转载自:Chown-Jane-Y的浅析Python3中的bytes和str类型 Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示, ...

  8. python中 str 和 repr_python repr()与str()区别总结

    python中,用于将某一类型的变量或者常量转换为字符串对象的方法有两种,即repr()和str().但是他们在定义.面向对象.返回处理方式.字符串处理和输出目的都有很大的不同,本文将做详细介绍. 1 ...

  9. python 去除str的引号 去除括号_Python基础教程:运算符以及数据类型解析

    运算符 一.算数运算: 二.比较运算: 三.赋值运算 四.逻辑运算 五.成员运算 基本数据类型 一.Number(数字) Python3中支持int.float.bool.complex. 使用内置的 ...

最新文章

  1. 深入浅出Java微服务视频
  2. linux下查看、删除指定文件名长度的文件
  3. linux shell if [[ ]]和[ ]区别 ||
  4. BZOJ 3156: 防御准备( dp + 斜率优化 )
  5. SpringBoot+Vue实现请求后台获取Base64编码的图片验证码并使用Redis缓存实现2分钟内有效
  6. fetch + async await 使用原生JS发送网络请求
  7. Mac下给sublime text3配置Nodejs
  8. Online Learning算法理论与实践
  9. P,NP,NPC,NP-Hard,co-NP问题辨析
  10. 【hiho挑战赛24 ABC】贪心和期望dp惨烈的后缀自动机
  11. 电商场景中的精排服务实践
  12. jstack查看某个进程堆栈信息
  13. 设计模式(六) : 创建型模式--原型模式
  14. java之PropertyUtils
  15. win10微信卡顿_终于找到Win10卡顿病根了!看完秒懂
  16. 使用VBSCRIPT安装字体
  17. 珍惜生命之水,节约从我做起
  18. 智遥工作流调用SAP基础数据,解决方案
  19. EasyGBS国标视频云服务平台可以获取录像却无法播放是什么原因?
  20. 在MAC下解决MAC unable to execute sex :GC overhead limit exceeded GC overhead的问题

热门文章

  1. csv to mysql_CSV to array
  2. 坦克大战python_Python语言学了没用?那只能说你是真的没有精通了Python语言
  3. python嵌套循环注意事项_python循环嵌套的几种使用方法
  4. 微信小程序选择框问题 小程序picker点击显示object range-key=这里写要显示的字段
  5. gradle mysql方言_Ktorm | 方言与原生 SQL
  6. php处理文件属性函数,文件属性 · PHP文件系统操作常用函数整理 · 看云
  7. websocket php MySQL_PHP写了一个websocket服务,mysql连接实例丢失问题怎么解决?
  8. java的gc策略_Java的GC与内存分配策略
  9. python构造方法new_Python 之 __new__() 方法与实例化(转)
  10. matlab 异步程序代码,正弦波电压源供电时三相异步电动机系统动态运行MATLAB仿真源程序...