zoukankan      html  css  js  c++  java
  • HDU1711 Number Sequence KMP

    欢迎访问~原文出处——博客园-zhouzhendong

    去博客园看该题解


    题目传送门 - HDU1711


    题意概括

      给T组数据,每组有长度为n和m的母串和模式串。判断模式串是否是母串的子串,如果是输出最先匹配完成的位置,否则输出-1.


    题解

      KMP裸题。


    代码

    #include <cstring>
    #include <algorithm>
    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    using namespace std;
    const int N=1000005,M=10005;
    bool isd(char ch){
    	return '0'<=ch&&ch<='9';
    }
    void read(int &x){
    	int f=1;
    	x=0;
    	char ch=getchar();
    	while (!isd(ch)&&ch!='-')
    		ch=getchar();
    	if (ch=='-')
    		f=-1,ch=getchar();
    	while (isd(ch))
    		x=x*10+ch-48,ch=getchar();
    	x*=f;
    }
    int T,n,m,a[N],b[M],Next[M];
    int main(){
    	read(T);
    	while (T--){
    		read(n),read(m);
    		for (int i=0;i<n;i++)
    			read(a[i]);
    		for (int i=0;i<m;i++)
    			read(b[i]);
    		memset(Next,0,sizeof Next);
    		int k=0;
    		for (int i=1;i<m;i++){
    			while (k&&b[k]!=b[i])
    				k=Next[k-1];
    			if (b[k]==b[i])
    				k++;
    			Next[i]=k;
    		}
    		int ans=-1;
    		k=0;
    		for (int i=0;i<n;i++){
    			while (k&&b[k]!=a[i])
    				k=Next[k-1];
    			if (b[k]==a[i])
    				k++;
    			if (k==m){
    				ans=i-m+2;
    				break;
    			}
    		}
    		printf("%d
    ",ans);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    WCF
    WCF
    C#
    ASP.NET MVC
    WCF
    关于函数的参数
    关于函数的return
    移动Web开发技巧汇总(转)
    关于reset.css的那些事
    关于iphone自动播放音频和视频问题的解决办法
  • 原文地址:https://www.cnblogs.com/zhouzhendong/p/HDU1711.html
Copyright © 2011-2022 走看看