tyvj1068 STR

原创 2016年08月29日 13:44:06

描述 给你两个串A,B,可以得到从A的任意位开始的子串和B匹配的长度。
给定K个询问,对于每个询问给定一个x,求出匹配长度恰为x的位置有多少个。 N,M,K<=200000 输入格式 第一行三个数
N,M,K,表示A的长度、B的长度和询问数。 第二行为串A。 第三行为串B。 接下来K行,每行1个数X。 输出格式 对于每个询问输出一个数。

扩展KMP算法模板题。
这种字符串算法的精髓就在于充分利用过去匹配的信息,巧妙地避免重复的比较。
于是这种算法就结合了KMP的模式串自我匹配和manacher的最远匹配,用于线性求解原串每个后缀与模式串的LCP。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char a[200010],b[200010];
int f[200010],g[200010],cnt[200010];
int main()
{
    int i,j,k,m,n,p,q,x,y,z,T,id,mx;
    scanf("%d%d%d",&n,&m,&T);
    scanf("%s",a+1);
    scanf("%s",b+1);
    mx=0;
    for (i=2;i<=m;i++)
    {
        if (i<mx) f[i]=min(f[i-id+1],mx-i+1);
        while (b[1+f[i]]==b[i+f[i]]) f[i]++;
        if (i+f[i]-1>mx)
        {
            id=i;
            mx=i+f[i]-1;
        }
    }
    mx=0;
    for (i=1;i<=n;i++)
    {
        if (i<mx) g[i]=min(f[i-id+1],mx-i+1);
        while (b[1+g[i]]==a[i+g[i]]) g[i]++;
        if (i+g[i]-1>mx)
        {
            id=i;
            mx=i+g[i]-1;
        }
        cnt[g[i]]++;
    }
    while (T--)
    {
        scanf("%d",&x);
        printf("%d\n",cnt[x]);
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载,欢迎添加友链。

python基本数据类型——str

一、字符串的创建 test = str() / "" test = str("licheng") / "licheng" 无参数,创建空字符串一个参数,创建普通字符串两个参数,int(...
  • z59d8m6e40
  • z59d8m6e40
  • 2017年06月02日 23:51
  • 220

Python中Str类的常用方法

核心知识点:1、Python中Str类常用的方法总结代码示例:#!/usr/bin/python # -*- coding:utf-8 -*-name = "zhangZhangZhang" prin...
  • a2011480169
  • a2011480169
  • 2017年05月07日 13:29
  • 948

python(0)-对《python中str操作的学习》的补充

对《python中str操作的学习》的补充str=’python String function’生成字符串变量str=’python String function’字符串长度获取:len(str)...
  • depers15
  • depers15
  • 2016年02月29日 13:01
  • 269

C语言str函数系列

常常见到面试时让写str系列函数,用的少,经常忘记,
  • KangRoger
  • KangRoger
  • 2014年05月05日 21:18
  • 24405

str和repr的区别

Python打印值的时候会保持该值在Python代码中的状态,不是用户所希望看到的状态。而使用print打印值则不一样,print打印出来的值是用户所希望看到的状态。 例如:>>> "Hello, ...
  • u013961718
  • u013961718
  • 2016年04月08日 22:45
  • 9544

python的str()和repr()的区别

str()一般是将数值转成字符串。 repr()是将一个对象转成字符串显示,注意只是显示用,有些对象转成字符串没有直接的意思。如list,dict使用str()是无效的,但使用repr可以,这是为...
  • longshenlmj
  • longshenlmj
  • 2013年07月24日 15:05
  • 8669

Python中的str与unicode处理方法

转自:http://python.jobbole.com/81244/ python2.x中处理中文,是一件头疼的事情。网上写这方面的文章,测次不齐,而且都会有点错误,所以在这里打算自己总结一篇...
  • vickyrocker1
  • vickyrocker1
  • 2016年03月22日 08:58
  • 5601

python函数——编码问题——str与Unicode的区别

一篇关于STR和UNICODE的好文章  整理下python编码相关的内容 注意: 以下讨论为Python2.x版本, Py3k的待尝试 开始 用python处理中文时,读取文件或消息,htt...
  • u010454729
  • u010454729
  • 2016年03月25日 13:16
  • 2419

String str = "abc"到底存于何处?

开博第一天,啊,打了好久,还不是很确定是否对了。欢迎各位斧正。谢谢!...
  • qq_29067755
  • qq_29067755
  • 2016年08月04日 23:16
  • 1002

C#中String str与String str=“”的区别 及 函数的参数数组。

1:先说一下String str与String str=“”这两种方式的区别 class Program { static void Main(string[] args) ...
  • zhifeiya
  • zhifeiya
  • 2013年05月19日 01:35
  • 1010
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:tyvj1068 STR
举报原因:
原因补充:

(最多只允许输入30个字)