| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 38888 | LYLAKIOI | 【BJ】T2 | C++ | 运行超时 | 90 | 1000 MS | 1828 KB | 1290 | 2025-11-11 20:56:19 |
#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define p_b push_back using namespace std; typedef long long ll; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } const int maxn=2e5+10,mod=998244353; int n,k,a[maxn],b[maxn],fail[maxn]; inline int add(int a,int b){if((a+=b)>=mod)a-=mod;return a;} void upd(int n,int *a){ down(i,n,1)a[i]=add(a[i],mod-a[i-1]); } int kmp(int n,int m,int *a,int *b){ if(!n)return 0; int p=0; up(i,2,n){ while(p&&a[p+1]!=a[i])p=fail[p]; if(a[p+1]==a[i])p++;fail[i]=p; }p=0; up(i,1,m){ while(p&&a[p+1]!=b[i])p=fail[p]; if(a[p+1]==b[i])p++; if(p==n)return i-n; } return -1; } void slv(){ n=read(),k=read()+1;k=min(k,n); up(i,1,n)a[i]=read(); up(i,1,n)b[i]=b[i+n]=read(); up(i,1,k)upd(n,a),upd(2*n,b); cout<<kmp(n-k,2*n-k,a+k,b+k); } int main(){ //freopen("rail.in","r",stdin),freopen("rail.out","w",stdout); slv(); return 0; }