题目描述
一个 n×m 的整数矩阵,已知其每一行从左到右拥有哪些元素,每一列从上到下拥有哪些元素。
但是,行和列的具体顺序并不确定。
请你根据已知的信息,将矩阵复原并输出。
算法1
模拟 O(nm)
我们可以在输入时左到右的数时存储每个数的y坐标,在输入上到下的数时存储每个数的x坐标,这样输入完之后就可以确定每个数的x,y坐标了。再遍历一下存储好的坐标,按照x,y坐标把数存储到另一个数组,输出出来就行了。因为题目说了样例中1至n∗m中的数恰好每个出现一次,所以可以保证每个数都能对应至唯一的坐标。
C++ 代码
#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
typedef pair<int, int> PII;
const int N = 505;
PII a[250000];
int ans[N][N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
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 v;
cin >> v;
a[v].y = j;
}
for (int i = 1; i <= m; i++)
for (int j = 1; j <= n; j++)
{
int v;
cin >> v;
a[v].x = j;
}
for (int i = 1; i <= n * m; i++)
ans[a[i].x][a[i].y] = i;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
cout << ans[i][j] << ' ';
cout << endl;
}
}
}
jahahhahaahhjkadhjkahdjksa
dsf
妙啊