zoukankan      html  css  js  c++  java
  • 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@
  • 相关阅读:
    【杭电】[2016]数据的交换输出
    【杭电】[2015]偶数求和
    【杭电】[2015]偶数求和
    【杭电】[2026]首字母变大写
    【杭电】[2026]首字母变大写
    【杭电】[2075]A|B?
    【杭电】[2075]A|B?
    【杭电】[2043]密码
    【杭电】[2043]密码
    SQL 06: 内连接 (多表查询)
  • 原文地址:https://www.cnblogs.com/zzuli2sjy/p/5185214.html
Copyright © 2011-2022 走看看