zoukankan      html  css  js  c++  java
  • HDU 1711 Number Sequence

    经典kmp

     1 #include <iostream>
     2 #include <cstdio>
     3 using namespace std;
     4 
     5     int n,m;
     6     int a[1000010],b[10010],next[10010];
     7 
     8 void getnext (int *s,int *next){
     9     next[0]=next[1]=0;
    10     for (int i=1;i<m;i++){
    11         int j=next[i];
    12         while (j&&s[i]!=s[j])
    13             j=next[j];
    14         next[i+1]=s[i]==s[j]?j+1:0;
    15     }
    16 }
    17 
    18 int kmp (int *a,int *b,int *next){
    19     getnext (b,next);
    20     int j=0;
    21     for (int i=0;i<n;i++){
    22         while (j&&a[i]!=b[j])
    23             j=next[j];
    24         if (a[i]==b[j])
    25             j++;//cout<<j<<" ";
    26         if (j==m)
    27             return i-m+2;
    28     }
    29     return -1;
    30 }
    31 
    32 int main (){
    33     int t;
    34     scanf ("%d",&t);
    35     while (t--){
    36         scanf ("%d %d",&n,&m);
    37         for (int i=0;i<n;i++)
    38             scanf ("%d",&a[i]);
    39         for (int i=0;i<m;i++)
    40             scanf ("%d",&b[i]);
    41         int ans=kmp (a,b,next);
    42         printf ("%d
    ",ans);
    43     }
    44     return 0;
    45 }
  • 相关阅读:
    CAP分布式
    专职DBA-MySQL数据库开篇
    os.sep
    DocStrings
    Python如何获取脚本的参数
    LVM基础命令
    VoAndEntityTrans
    短信倒计时
    springboot在eclipse上搭建项目一(无页面)
    springboot问题
  • 原文地址:https://www.cnblogs.com/gfc-g/p/3855238.html
Copyright © 2011-2022 走看看