Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
26863 岳亦铭 【BJ】T2 C++ 通过 100 104 MS 131140 KB 1200 2024-02-26 19:12:25

Tests(10/10):


#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||f[i][j]>=f[n+1][m+1]) 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); } if(f[n+1][m+1]==1) { cout<<1<<endl; return 0; } } } if(f[n+1][m+1]<=1e6) cout<<f[n+1][m+1]<<endl; else cout<<max(n+1,m+1)<<endl; return 0; }


测评信息: