SN祈祷中...

题解 AT_arc132_a Permutation Grid

简要题意:

给定两个数列 内均有 个元素,要求根据 对一个 的矩阵进行染色,使得第 行有 个黑色块,第 列有 个黑色块。最后, 均为 的一个排列。

反思分析:

有个伸臂和一个神犇在赛时没有看到最后一个条件导致两个人想出了各种各样复杂又奇葩的做法,我不说是谁

有了排列那这不成水题了,我们以样例为例(这什么话)把它按顺序重新排列一下,就会变成这样(我们用表示白色,表示黑色):

$

$

我们稍加观察,然后惊奇地发现,坐标为的块是黑色当且仅当,然后我们恢复原序列 $

$ 发现这个性质仍然存在!

我们可以通过简单地平移来证明这种做法的正确性,而代码也就相应的非常好写了:

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
#include <iostream>
#include <cstdio>
using namespace std;

namespace SHAWN {
const int N = 1e5 + 7;
int r[N],c[N];
int n, q;
int work()
{
cin >> n;
for (int i = 1; i <= n; ++i) { cin >> r[i]; }
for (int i = 1; i <= n; ++i) { cin >> c[i]; }
cin >> q;
for (int i = 1, x, y; i <= q; ++i) {
cin >> x >> y;
if (r[x] + c[y] > n) { cout << '#'; }
else { cout << '.'; }
}
return 0;
}
}

signed int main() {
ios :: sync_with_stdio(false);
cin.tie(nullptr);
return SHAWN :: work();
}