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是偶数,所以对于多出的颜色,我们可以在同一对角线上交替地放两种颜色

posted @ 2020-08-04 21:38  shixinyi  阅读(186)  评论(0编辑  收藏  举报