| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 42028 | 真很诡异你知道吗其实我不是皇子瑞 | 【S】T4 | C++ | 运行超时 | 86 | 2000 MS | 285440 KB | 2003 | 2026-06-10 13:44:20 |
#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); } }