SDUT OJ 2463 學密碼學一定得學程序

#include<iostream>
#include<string.h>
#include<stdio.h>
#define N 10010
#define M 1000100
using namespace std;
int next[N];
char s[M],t[N];
void getnext(char s[])
{
    int i=0,j=-1,len;
	next[0]=-1;
	len=strlen(s);
	while(i<len)
	{
		if(j==-1 || s[i]==s[j])
		{
			i++;
			j++;
			if(s[i]!=s[j])  
				next[i]=j;
			else
                next[i]=next[j];
		}
		else
			j=next[j];
	}
}
int KMP(char s[],char t[])
{
	int i=0,j=0,len,len1;
	len=strlen(s);
	len1=strlen(t);
	while(i<len && j<len1)
	{
		if(j==-1 || s[i]==t[j])
		{	i++;
		    j++;
		}
		else
			j=next[j];
	}
	if(j>=len1)  return i-len1+1;
	else   return 0;
}	    
int main()
{
	int n;
	cin>>n;
	while(n--)
	{
		cin>>s>>t;
	    getnext(t);
		int m=KMP(s,t);
		if(m)
			cout<<m<<endl;
		else
			cout<<"::>_<::"<<endl;
	}
	return 0;
}

發佈了53 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章