标签:break print turn ret def == hdu2087 kmp --
#include<bits/stdc++.h> using namespace std; void read(int &x){ x=0;int f=1;char ch=getchar(); for(;!isdigit(ch);ch=getchar())if(ch==‘-‘)f=-f; for(;isdigit(ch);ch=getchar())x=(x<<1)+(x<<3)+ch-‘0‘;x*=f; } #define write(x) printf("%d\n",x) #define maxn 1005000 int p[1005001],n,m,k,a[1005001],b[1005001],lena,lenb,j; int main() { read(k); while(k--) { p[1]=0; read(lena),read(lenb); j=0; for(int i=1;i<=lena;i++) read(a[i]); for(int i=1;i<=lenb;i++) read(b[i]); for(int i=2;i<=lenb;i++) { while(j>0&&b[j+1]!=b[i]) j=p[j]; if(b[j+1]==b[i])j++; p[i]=j; } j=0; bool bo=1; for(int i=1;i<=lena;i++) { while(j>0&&b[j+1]!=a[i]) //如果匹配串第J个位置还可以滑动,且第j+1个位置与母串的第i个位置不匹配的话 j=p[j]; //滑动 if(b[j+1]==a[i]) j++; if(j==lenb){printf("%d\n",i-lenb+1);bo=0;break;} } if(bo) puts("-1"); } return 0; }
如果希望找到多个位置,Hdu2087剪花布条
if(j==lenb)
{
ans++;
printf("%d\n",i-j+1)
j=0;
}
Hdu1711 Number Sequence--Kmp模板题
标签:break print turn ret def == hdu2087 kmp --
原文地址:https://www.cnblogs.com/cutemush/p/12252826.html