Solution
小清新构造题。
把每一格初始化为 ,接下来进行 次操作。第 次操作将第 行为 的格子全部变成 ,然后将第 列为 的格子全部变成 。
对于 ,显然 行相比 行, 的格子更少。少掉的格子一定是在前面的操作中被改成了 。所以即使 行其余所有格子直接改成 ,也不影响正确性。同理, 的顺序同样得到满足,正确性得证。
Code
#include <bits/stdc++.h>
using namespace std;
const int N = 505;
int p[N], q[N], ans[N][N], n;
int main()
{
memset(ans, -1, sizeof(ans));
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d", &p[i]);
for (int i = 1; i <= n; i++)
scanf("%d", &q[i]);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++)
if (ans[p[i]][j] == -1)
ans[p[i]][j] = 0;
for (int j = 1; j <= n; j++)
if (ans[j][q[n - i + 1]] == -1)
ans[j][q[n - i + 1]] = 1;
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++)
printf("%d", ans[i][j]);
putchar('\n');
}
return 0;
}