agc030C Coloring Torus
称对于一个$n \times n$的方格和颜色数$K$的涂色方案是好的,当且仅当:
1、每个方格都涂了$K$种颜色中的一个
2、每种颜色都至少被涂了一次
3、对于任意两种颜色$i, j$,满足对所有颜色为$i$的格子,与它相邻的格子中颜色为$j$的格子的数量都是一样的。
相邻的定义:
当且仅当$a=c$且$d-b= \pm 1 \mod n$ 或者 $b=d$且$a-c=\pm 1\mod n$
现在给你颜色数$K \leq 1000$,你可以在$[1, 500]$中选择一个$n$,构造一种好的涂色方案。
你问我为啥一个多小时想不出来?
我那时候分析了以下一些东西:
1、$K$要是500以内的话,不用说了,直接每行一个颜色
2、要是所有颜色都出现了一次,那太棒了,条件$K = n^2$
3、要是每行有个相同的循环节,且$n$能被循环节长度整除就可以做
比如:
1 2 1 2 3 4 3 4 5 6 5 6 7 8 7 8
条件:$K = A^2 \times B, n = A \times B$
4、条件严苛的对称
就是,同一种颜色的每个格子,都是相同的地位,比如
1 2 2 1 3 4 4 3 5 6 6 5 7 8 8 7
以及
1 2 1 1 2 1 3 4 3 3 4 3 5 6 5 5 6 5 7 8 7 7 8 7 ...
以及
1 2 3 3 2 1 1 2 3 3 2 1 4 5 6 6 5 4 4 5 6 6 5 4 ...
以及
1 2 3 2 4 5 3 5 6
以及
1 2 2 1 3 4 4 3 3 4 4 3 1 2 2 1
于是,我就根据$n$二进制表示后的样子开始讨论对称最多对折次数等等
5、循环和对称可以进行一些组合
当我讨论到快要疯掉的时候,我发现,,以上所有方法,似乎都解决不了某种情况:
$K$是$>500$的质数。
后来我看了题解,发现我场上想这题的时候,有以下几个问题:
1、我总是想找到$n$和$K$之间的数学关系,但是其实是可能一个$n$解决所有$>500$的$K$的。
或者说,对于一个$n$,在某个区间内的$K$都可以做。
或者说,对于某个已经ok的方案,或许可以再加一个颜色,稍微改一些地方就可以把这个颜色塞进去。
2、我既然都想到了每行一种颜色了,我咋没想到每个斜对角线一种颜色呢?
题解:
对于$K>500$,取$n = 500$,同一对角线放一种颜色。
由于500是偶数,所以对于多出的颜色,我们可以在同一对角线上交替地放两种颜色