• KMP


    http://www.matrix67.com/blog/archives/115

    http://www.cnblogs.com/c-cloud/p/3224788.html 

     1 #include<stdio.h>
     2 #include<algorithm>
     3 #include<iostream>
     4 #include<string.h>
     5 #include<stdlib.h>
     6 #include<math.h>
     7 #include<cstdio>
     8 #include<queue>
     9 #include<stack>
    10 void Next(int x);
    11 int KMP(int k,int y);
    12 const int N=1e6+10;
    13 int NEXT[N];
    14 int A[N];
    15 int B[N];
    16 using namespace std;
    17 int main(void)
    18 {
    19     int n,i,j,k,p,q;
    20     scanf("%d",&k);
    21     while(k--)
    22     {
    23         scanf("%d %d",&p,&q);
    24         for(i=1;i<=p;i++)
    25         scanf("%d",&A[i]);
    26         for(i=1;i<=q;i++)
    27         scanf("%d",&B[i]);
    28         Next(q);
    29         int xx=KMP(p,q);
    30         if(xx==p+1)
    31         {
    32             printf("-1 ");
    33         }
    34         else printf("%d ",xx-q+1);
    35     }
    36     return 0;
    37 }
    38 
    39 void Next(int x)
    40 {
    41     int i,j;
    42     NEXT[0]=0;
    43     NEXT[1]=0;
    44     j=0;
    45     for(i=2;i<=x;i++)
    46     {
    47         while(j>0&&B[j+1]!=B[i])
    48         {
    49             j=NEXT[j];
    50         }
    51         if(B[j+1]==B[i])
    52         {
    53             j++;
    54         }
    55         NEXT[i]=j;
    56 
    57     }
    58 }
    59 int KMP(int k,int y)
    60 {
    61     int i,j;
    62     j=0;
    63     for(i=1;i<=k;i++)
    64     {
    65         while(j>0&&A[i]!=B[j+1])
    66         {
    67             j=NEXT[j];
    68         }
    69         if(A[i]==B[j+1])
    70         {
    71             j++;
    72         }
    73         if(j==y)
    74         {
    75             break;
    76         }
    77     }
    78     return i;}
    油!油!you@
  • 相关阅读:
    ISCC 2018——write up
    图的存储结构(十字链表、邻接多重表、边集数组)
    图的存储结构
    树梅派(Raspberry Pi 3b)安装kali linux 2.0
    树梅派3B kali2.0 启用SSH进行远程登录
    VS+VAssistX自动添加注释
    libtiff库使用
    word采用尾注进行参考文献排版的一些问题
    vs2008安装opencv2.4.6
    Altera CYCLONE III FPGA BGA布线
  • 原文地址:https://www.cnblogs.com/zzuli2sjy/p/5185214.html
Copyright © 2020-2023  润新知