提交时间:2024-02-26 14:29:39

运行 ID: 26796

#include <bits/stdc++.h> using namespace std; const int maxn=4010; int n,m,k; int a[maxn],b[maxn]; int nxta[maxn][maxn],nxtb[maxn][maxn]; int f[maxn][maxn]; int main() { ios::sync_with_stdio(false); cin>>n>>m>>k; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=m;i++) cin>>b[i]; for(int i=0;i<=n;i++) for(int j=i+1;j<=n;j++) if(!nxta[i][a[j]]) nxta[i][a[j]]=j; for(int i=0;i<=n;i++) for(int j=1;j<=k;j++) if(!nxta[i][j]) nxta[i][j]=n+1; for(int i=0;i<=m;i++) for(int j=i+1;j<=m;j++) if(!nxtb[i][b[j]]) nxtb[i][b[j]]=j; for(int i=0;i<=m;i++) for(int j=1;j<=k;j++) if(!nxtb[i][j]) nxtb[i][j]=m+1; for(int i=1;i<=k;i++) nxta[n+1][i]=n+1,nxtb[m+1][i]=m+1; memset(f,0x3f,sizeof(f)); f[0][0]=0; int cnt=0; for(register int i=0;i<=n+1;i++) { for(register int j=0;j<=m+1;j++) { if(a[i]!=b[j]||f[i][j]>1e6) continue; for(register int nxt=1;nxt<=k;nxt++) { int posa=nxta[i][nxt],posb=nxtb[j][nxt]; f[posa][posb]=min(f[posa][posb],f[i][j]+1); cnt++; } if(f[n+1][m+1]==1) { cout<<1<<endl; return 0; } if(cnt>5e7) break; } if(cnt>5e7) break; } if(f[n+1][m+1]<=1e6) cout<<f[n+1][m+1]<<endl; else cout<<max(n+1,m+1)<<endl; return 0; }