Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
42029 真很诡异你知道吗其实我不是皇子瑞 【S】T4 C++ 运行超时 86 2000 MS 285440 KB 2003 2026-06-10 13:45:30

Tests(13/15):


#include<bits/stdc++.h> using namespace std; int n,m,a[10][100005],rk[10][100005],st[6][100005][20][6],p[6],_[6]; int main(){ scanf("%d%d",&n,&m); memset(st,0x3f,sizeof(st)); for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ scanf("%d",&a[i][j]); rk[i][a[i][j]]=j; } } for(int i=1;i<=m;++i){ for(int j=1;j<=m;++j){ int nmin=n+1; for(int k=n;k>=1;k--){ nmin=min(nmin,rk[j][a[i][k]]); st[i][k][0][j]=nmin; } } } for(int f=1;f<=19;++f){ for(int i=1;i<=m;++i){ for(int j=1;j<=m;++j){ for(int k=1;k<=n;k++){ for(int z=1;z<=m;++z){ st[i][k][f][j]=min(st[i][k][f][j],st[z][st[i][k][f-1][z]][f-1][j]); } } } } } int q; scanf("%d",&q); while(q--){ int x,y; scanf("%d%d",&x,&y); int flag=0; for(int i=1;i<=m;i++){ if(rk[i][x]<rk[i][y]){ flag=1; } p[i]=rk[i][x]; } if(flag==1){ printf("1\n"); continue; } int ans=0; for(int f=19;f>=0;f--){ memset(_,0x3f,sizeof(_)); for(int i=1;i<=m;++i){ for(int j=1;j<=m;++j){ _[j]=min(_[j],st[i][p[i]][f][j]); } } int flag=0; for(int i=1;i<=m;i++){ if(_[i]<=rk[i][y])flag=1; } if(flag==0){ ans+=(1<<f); for(int i=1;i<=m;i++){ p[i]=_[i]; } } if(ans>n){ printf("-1\n"); ans=-1; break; } } if(ans!=-1) printf("%d\n",ans+2); } }


测评信息: