zoukankan      html  css  js  c++  java
  • agc030C Coloring Torus

    称对于一个$n imes n$的方格和颜色数$K$的涂色方案是好的,当且仅当:

    1、每个方格都涂了$K$种颜色中的一个

    2、每种颜色都至少被涂了一次

    3、对于任意两种颜色$i, j$,满足对所有颜色为$i$的格子,与它相邻的格子中颜色为$j$的格子的数量都是一样的。

    相邻的定义:

    当且仅当$a=c$且$d-b= pm 1 mod n$ 或者 $b=d$且$a-c=pm 1mod 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 imes B, n = A imes 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是偶数,所以对于多出的颜色,我们可以在同一对角线上交替地放两种颜色

  • 相关阅读:
    BestCoder Round #65 hdu5590(水题)
    codeforces Ebony and Ivory(水题)
    codeforces 630B Moore's Law
    BestCoder Round #69 (div.2)(hdu5611)
    BestCoder Round #73 (div.2)(hdu 5630)
    codeforces 630A Again Twenty Five!
    codeforces 630C Lucky Numbers
    codeforces 630D Hexagons!
    Codeforces243C-Colorado Potato Beetle(离散化+bfs)
    hdu4453-Looploop(伸展树)
  • 原文地址:https://www.cnblogs.com/Serene-shixinyi/p/13436109.html
Copyright © 2011-2022 走看看