zoukankan      html  css  js  c++  java
  • codevs1404字符串匹配

    /*
    无奈我改了那么久还是看的题解
    首先跑一边kmp 几下ans[p]表示总共匹配到长度p的次数
    这些不一定都是恰好到p 所以在处理一下 
    ans[p]通过处理变成 所有的匹配到长度p的次数
    最后答案就是总共匹配到长度p+1的次数 - 总共匹配到长度p的次数
    就是恰好匹配到长度p的次数 
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define maxn 200010
    using namespace std;
    int l1,l2,k,s,fail[maxn],ans[maxn];
    char s1[maxn],s2[maxn];
    void kmp_init()
    {
        for(int i=2;i<=l2;i++)
          {
              int p=fail[i-1];
              while(p&&s2[p+1]!=s2[i])
                p=fail[p];
              if(s2[p+1]==s2[i])
                fail[i]=p+1;
              else p=0;
          }
        return ;
    }
    void kmp_slove()
    {
        int p=0;
        for(int i=1;i<=l1;i++)
          {
              while(p&&s2[p+1]!=s1[i])
                p=fail[p];
              if(s2[p+1]==s1[i])p++;
            ans[p]++;
          }
    }
    int main()
    {
        scanf("%d%d%d",&l1,&l2,&k);
        scanf("%s%s",s1+1,s2+1);
        kmp_init();
        kmp_slove();
        for(int i=l2;i>0;i--) 
          ans[fail[i]]+=ans[i];
        for(int i=0;i<l2;i++)
          ans[i]-=ans[i+1];
        for(int i=1;i<=k;i++)
          {
              scanf("%d",&s);
              printf("%d
    ",ans[s]);
          }
        return 0;
    }
  • 相关阅读:
    hexo博客安装教程
    MySQL 索引
    linux笔记
    Matab:plot图形操作
    Verilog--DC
    Verilog--二进制编码到格雷码的转换
    Undefined symbol SystemInit (referred from startup_stm32f10x_md.o).
    电源设计
    蓝牙通信
    quartus II的USB Blaster驱动器安装
  • 原文地址:https://www.cnblogs.com/yanlifneg/p/5474927.html
Copyright © 2011-2022 走看看