Codeforces Round #609 (DIV 2) D. Domino for Young

题目

我对官方题解的理解。

断言:Young 图能被多米诺骨牌填满的充要条件是:将 Young 图棋盘染色后,黑白格子的数量相等。

显然,此条件是必要的,下面证明它也是充分的。

我们用每一列的高度来表示一个 Young 图。

下面叙述一种用多米诺骨牌填充 Young 图的方法。

为了方便描述,把最右侧的那一列称为第一列,第一列左边的那一列称为第二列,以此类推。
下述方法保证:若 Young 图里的某个格子 \(x\) 被多米诺骨牌所覆盖,则 \(x\) 所在列中在 \(x\) 上方的所有格子也被多米诺骨牌覆盖了。
显然,满足这个条件的填充方法总是存在的。下文中,我们把被多米诺骨牌覆盖了的格子看做是被删除了。

从右往左看 Young 图的每一列。

  1. 若第一列的高度是偶数,则把它删除。例子:5 4 3 2 2 变成 5 4 3。若第一列的高度是奇数,则把这一列除了最底下的那一块之外的部分删除。例子:5 4 3 变成 5 4 1

  2. 此时第1列高度是1,若第2列高度是奇数,则一定可以把这两列都填满并删除,回到第1步。例子:5 3 1 变成 5。若第2列的高度是偶数,则把第2列删到只剩下最底下的两格,转第3步。例子:5 4 1 变成 5 2 1。

  3. 若第三列的高度和第二列的高度奇偶性相同,先把它的高度降为和第二列相同,再把第二列和第三列的高度都降为1,再把第一列和第二列删除。转第2步。

  4. .....

按上述方法,最后 Young 图要么被删空,要么变成形如 \(k, k - 1, \dots, 2, 1\),而这样的 Young 图中黑白格子的数量一定不相等。也就是说如果最初的 Young 图经棋盘染色后黑白格子数量相等,最后一定会被删空,换言之,一定能被多米诺骨牌填满。至此就证明了断言。

设输入的 Young 图经棋盘染色后有 \(B\) 个黑格子和 \(W\) 个白格子。显然,能填入的多米诺骨牌数量不超过 \(\min(B, W)\)。可以证明,一定能填入 \(\min(B, W)\) 个多米诺骨牌。

下面证明:形如 \(k, k - 1, \dots, 2, 1\) 的 Young 图满足条件。

0
-----------
0
1 0
-----------
0
1 0
0 1 0
-----------

上图中 0 代表白色格子,1代表黑色格子。不失一般性,假设左上角的格子染成白色,这时白格子比黑格子多。对 \(k\) 用归纳法。设 \(k = n\) 时结论成立,则 \(k = n + 1\) 时比 \(k = n\) 时多出了最下层的一排格子,这一层格子是黑白相间的且最右侧的格子是白的,因此这一层里的每个黑格子都可以找到一个相邻的白格子与之配对。

posted @ 2019-12-23 00:17  Pat  阅读(481)  评论(0编辑  收藏  举报