思路
对于每一行,我们存储每个数所在的列,对于每一列,我们去查询在哪一行,然后存储到一个答案数组即可。
AC代码
C++
#include <iostream>
using namespace std;
const int maxn = 510;
int p[maxn*maxn];
int ans[maxn][maxn];
int main(int argc, char *argv[]) {
int t;
cin >> t;
while(t--){
int n,m;
cin >> n >> m;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
int x;
cin >> x;
p[x] = j;
}
}
for(int i = 1; i <= m; i++){
int x;
cin >> x;
int ind = p[x];
ans[1][ind] = x;
for(int j = 2; j <= n; j++){
cin >> x;
ans[j][ind] = x;
}
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++)
cout<<ans[i][j]<<" ";
cout<<endl;
}
}
return 0;
}
Python
t = int(input())
N = 510
p = [-1]*(N**2)
ans = [[-1]*N for _ in range(N)]
for _ in range(t):
n,m = map(int,input().split())
# 记录每个数的列号
for _ in range(n):
x = list(map(int,input().split()))
for i in range(1,m+1):
p[x[i-1]] = i
for _ in range(m):
y = list(map(int,input().split()))
col = p[y[0]]
for i in range(1,n+1):
ans[i][col]=y[i-1]
for i in range(1,n+1):
for j in range(1,m+1):
print(ans[i][j],end=" ")
print("")