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

字符串的处理,用KMP喽,首先求出模式串B的next[],然后进行一遍AB匹配,记录a[i]匹配的最大长度,那么如果a[i]可以匹配l[i]的长度,answer[i]表示匹配长度为i的串的数量,则answer[next[i]]的匹配长度也是满足answer[i]的,所以只要倒着循环一遍,把answer[next[i]]加到answer[i]中即可。这时的answer[i]包含了长度为i+1的情况,所以要输出answer[k]-answer[k+1].

View Code

 1 program tyvj1068(input,output); 2 var 3    a,b      : ansistring; 4    next,l : array[0..201000] of longint; 5    answer : array[0..201000] of longint; 6    i,j,x  : longint; 7    n,m,k  : longint; 8    ch      : char; 9 begin10    readln(n,m,k);11    a:='';12    b:='';13    for i:=1 to n do14    begin15       read(ch);16       a:=a+ch;17    end;18    readln;19    for i:=1 to m do20    begin21       read(ch);22       b:=b+ch;23    end;24    readln;25    fillchar(next,sizeof(next),0);26    next[1]:=0;27    j:=0;28    for i:=2 to m do29    begin30       while (j>0)and(b[j+1]<>b[i]) do31      j:=next[j];32       if b[j+1]=b[i] then33      inc(j);34       next[i]:=j;35    end;36    j:=0;37    for i:=1 to n do38    begin39       while (j>0)and(b[j+1]<>a[i]) do40      j:=next[j];41       if b[j+1]=a[i] then42      inc(j);43       l[i]:=j;44       if j=m then45      j:=next[j];46    end;47    fillchar(answer,sizeof(answer),0);48    for i:=1 to n do49       inc(answer[l[i]]);50    for i:=n downto 1 do51       inc(answer[next[i]],answer[i]);52    for i:=1 to k do53    begin54       readln(x);55       writeln(answer[x]-answer[x+1]);56    end;57 end.

转载于:https://www.cnblogs.com/neverforget/archive/2012/03/27/2419621.html

tyvj1068 STR相关推荐

  1. 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 ...

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

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

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

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

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

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

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

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

  6. 浅析Python中bytes和str区别

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

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

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

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

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

  9. Python中自定义类如果重写了__repr__方法为什么会影响到str的输出?

    这是因为Python3中,str的输出是调用类的实例方法__str__来输出,如果__str__方法没有重写,则自动继承object类的__str__方法,而object类的__str__方法是调用_ ...

最新文章

  1. MLPerf Inference 0.7应用
  2. ​“手把手撕LeetCode题目,扒各种算法套路的裤子”
  3. 忽略这一点,人工智能变人工智障!
  4. elgamal java_ElGamal - 源码下载|系统编程|加密解密|源代码 - 源码中国
  5. IMT-2030(6G)推进组发布《6G总体愿景与潜在关键技术》白皮书
  6. Scrum 项目1.0 2.0 3.0 4.0 5.0 6.0 7.0
  7. boost::hana::power用法的测试程序
  8. [51nod] 1301 集合异或和
  9. xxx定律-poj-3782
  10. 工作388-jq返回实例
  11. java用netty做tcpserver接收c++消息_netty案例,netty4.1基础入门篇四《NettyServer收发数据》...
  12. RMAN duplicate恢复数据库报错RMAN-06054问题处理
  13. HDU4612+Tarjan缩点+BFS求树的直径
  14. go语言读取文件的方法-1
  15. 云计算 码率适配限速_5G 成熟后,带宽足够且云计算力够大,会不会对 PC 的升级需求放缓?...
  16. 点分十进制表示的字符串转换为 unsigned int 整型数值
  17. 易行长指出了利率市场化”最后一枪“
  18. coreldraw橙子怎么画_CorelDRAW(CDR)设计绘制质感的橙子和冰块实例教程
  19. 中国被爱可以在线WAP站点首页源代码
  20. 2022国际数维杯C题题解:利用大脑结构特征和认知行为特征诊断阿尔茨海默病

热门文章

  1. Excel中vlookup函数的使用方法
  2. set escape on
  3. Thirft框架介绍
  4. Confluence与Jira整合之统一用户管理
  5. spring 控制hibernate的session何时关闭.
  6. ReentrantLock之公平锁源码分析
  7. Identityserver4中ResourceOwnerPassword 模式获取refreshtoken
  8. 手机号码、获得当前时间,下拉框,填写限制
  9. 关于OnPaint、FormPaint会不停的触发 触发多次的情形---讨论总结
  10. Android中获取手机电量信息