cf 1435 B
判断第一个字符就好了,然后用map存下每一行,按照列的顺序就直接输出
#include<bits/stdc++.h>
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<map>
#include<set>
#include<string>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
//#pragma GCC optimize(3)
//#pragma GCC optimize(2)
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn = 1000010;
const int mod = 1e9 + 7;
ll i, j, t, k, l, r;
ll ans, sum, cnt, sum1, sum2, num;
ll a[1000][1000], b[1000][1000],c[1000][1000], vis[maxn], lsh[maxn];
ll flag = 0, n, m, x, y, d[1000][1000];
vector<vector <vector <vector <int> > > >dp(71,vector<vector<vector<int>>>(71,vector<vector<int>>(71,vector<int>(35,-1))));
vector< vector<int> >mp(70,vector<int >(70));
template <typename T>
void read(T& x) /*快读*/
{
x = 0;
int f = 1;
char ch = getchar();
while (!isdigit(ch))
{
if (ch == '-')
f = -1;
ch = getchar();
}
while (isdigit(ch))
{
x = x * 10 + (ch ^ 48);
ch = getchar();
}
x *= f;
return;
}
int main()
{
cin>>t;
while(t--)
{
map<int,int >mp;
read(n),read(m);
rep(i,1,n)
{
rep(j,1,m)
{
cin>>a[i][j];
}
}
k=a[1][1];
rep(i,1,m)
{
rep(j,1,n)
{
cin>>b[i][j];
if(k==b[i][j])
{
x=i;
}
}
}
rep(i,1,n)
{
rep(j,1,n)
{
if(a[i][1]==b[x][j])
mp[j]=i;
}
}
// for(auto i:mp)
// {
// rep(j,1,m)
// {
// cout<<a[i.second][j]<<" ";
// }
// cout<<endl;
// }
// /*
// 前八行这几句也可以写成;
map<int,int >::iterator it;
for(it =mp.begin(); it!=mp.end(); it++)
{
for(j=1; j<=m; j++)
cout<<a[it->second][j]<<" ";
cout<<endl;
}
// */
}
return 0;
}