0%

ARC181C Row and Column Order

传送门

Solution

小清新构造题。

把每一格初始化为 1-1,接下来进行 nn 次操作。第 ii 次操作将第 pip_i 行为 1-1 的格子全部变成 00,然后将第 qni+1q_{n-i+1} 列为 1-1 的格子全部变成 11

对于 i<ji<j,显然 pjp_j 行相比 pip_i 行,1-1 的格子更少。少掉的格子一定是在前面的操作中被改成了 11。所以即使 pjp_j 行其余所有格子直接改成 00,也不影响正确性。同理,qiq_i 的顺序同样得到满足,正确性得证。

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#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;
}