提交时间:2025-11-10 19:00:12

运行 ID: 38862

#include<bits/stdc++.h> #define ll long long #define i128 __int128_t using namespace std; const int N=1e5+10,mod=998244353; int n,k; int a[N<<1],b[N<<1]; int fail[N<<3],num[N<<3],len=0; void kmp(){ fail[0]=0;fail[1]=0; for(int i=2;i<=len;i++){ fail[i]=0;int now=i-1; do{ now=fail[now]; if(num[now+1]==num[i]){ fail[i]=now+1;break; } }while(now); } } int main(){ //freopen("rail.in","r",stdin); //freopen("rail.out","w",stdout); cin>>n>>k; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) cin>>b[i]; if(k>=n-1){ cout<<0<<endl; return 0; } for(int i=1;i<=n;i++) b[i+n]=b[i]; for(int t=1;t<=k+1;t++){ for(int i=2*n;i>=1;i--){ a[i]=(a[i]+mod-a[i-1])%mod; b[i]=(b[i]+mod-b[i-1])%mod; } }int stp=k+2,lena=n-stp+1; for(int i=stp;i<=n;i++) num[++len]=a[i]; num[++len]=-1; for(int i=stp;i<=2*n;i++) num[++len]=b[i]; kmp(); for(int i=1;i<=n;i++){ if(fail[i+lena+lena]==lena){ cout<<i-1<<endl; return 0; } }cout<<-1<<endl; return 0; }