怎么外国都喜欢考脑筋急转弯……


题意

输入 $k$,要求构造一个 $n\times n$ 的矩阵($n$ 自选),使得恰好用 $k$ 中颜色把每个点都染色,并且同一种颜色的格子周围 相邻的每种颜色数量都相同。

比如矩阵中有两个格子的颜色是 $4$,其中一个格子周围有三个(颜色)$3$ 和一个 $1$,那另一个格子周围也得有三个 $3$ 和一个 $1$,但周围颜色的顺序不必相同。

矩阵的第 $1$ 行上面与第 $n$ 行相连,第 $1$ 列左面与第 $n$ 列相连。

$k\le 1000$,且自选的 $n$ 必须属于 $[1,500]$。

题解

先规定一下,颜色从 $1$ 到 $n$ 编号。

首先 $k\le 500$ 时很好做,令 $n=k$,第 $i$ 行全填 $i$ 就行了,所有格的行列相邻状况显然相同,不用说明了吧……

如果 $k\gt 500$,就得考虑奇怪的方法了。

先思考一下,如果 $k$ 是 $4$ 的倍数,我们可以这么填:

比如 $k=8$ 的情况,构造一个 $n=k/4\times 2=4$ 的矩阵,长这样:

$$1\space 2\space 3\space 4$$

$$5\space 6\space 7\space 8$$

$$1\space 2\space 3\space 4$$

$$5\space 6\space 7\space 8$$

这样粗暴且满足题意。

但 $k$ 不是 $4$ 的倍数呢?

我们考虑移位。

要移位的话,说明我们还要借鉴前面的方法,至少所以矩阵的大小暂定为把 $k$ 上取整为 $4$ 的倍数,即 $⌊(k+3)/4⌋\times 2$。

但还不能简单地移位,比如 $k=6$ 时,每两行都填

$$1\space 2\space 3\space 4$$

$$3\space 4\space 5\space 6$$

这样错位后,同一种颜色的格子的左右两格颜色都相同,但上下两格颜色就不一定相同了。

所以我们考虑一种构造,使得同一种颜色的格子的上下左右四格的颜色 在某些意义上关于这种颜色固定。

这就有一个很简单的方法了:规定第 $i$ 行第 $j$ 列的位置的颜色是 $(i+j+1)\mod k$。这样直接满足上述性质。

而且这样构造,还可以使两个颜色的相对位置固定。

比如矩阵有一个位置的颜色是 $1$,它右边位置的颜色是 $2$,那么矩阵中每出现一个 $1$,它右边必有一个 $2$,反之同理,出现一个 $2$,它的左边就必有一个 $1$。

我们称之为相对相邻性。该性质对于任何方向都成立。

可以手玩一下 $k=3,4$ 的情况,发现两个矩阵分别是(其实矩阵不唯一)

$$1\space 2$$

$$2\space 3$$

$$1\space 2$$

$$4\space 3$$

两个矩阵的长宽 $n$ 根据之前说过的式子,可算出都是 $2$。然后发现第二个矩阵的那个 $4$ 模 $n$ 后等于第一个矩阵对应的那个 $2$ ?

我们考虑这是怎么转化过去的。

当 $k=3$ 时,矩阵显然。

把 $k$ 加 $1$,即多了一种要用的颜色,我们把偶数行的 $2$ 换成了 $4$,保留了奇数行的 $2$。

好像就是把奇偶行分类,新加一种颜色时,把偶数行的对应颜色值 $+n$?

但是这个很好证明么?……依然用这个方法,换个大点的矩阵

$k=5,6$ 的情况

$$3\space 4\space 1\space 2$$

$$4\space 5\space 2\space 3$$

$$1\space 2\space 3\space 4$$

$$2\space 3\space 4\space 5$$

$$3\space 4\space 1\space 2$$

$$4\space 5\space 6\space 3$$

$$1\space 2\space 3\space 4$$

$$6\space 3\space 4\space 5$$

两个矩阵的 $n$ 都是 $4$。

其实就是把偶数行的 $2$ 都通过 $+n$,换成了新的颜色 $6$。

然后我们惊奇地发现这个矩阵满足题意。

用上新的颜色的证明就不说了。

那怎么证明每种颜色周围的每种颜色数量都相同?

首先,新搞出来的这种颜色肯定都满足要求,因为在它们之前的颜色就满足要求。

然后,我们考虑它们周围的格子的颜色。

根据我们的构造方式,可以证明,对于任意一个颜色为 $x$ 的格子相邻的某个方向相邻的数,它一定恰好只在所有颜色为 $x$ 的格子的这个方向的相邻位置出现。

这个结论可以根据之前的一段加粗的性质得出。

如果是这样的话,那么周围的格子的颜色对应的所有格子 就必定都作了同样的修改,所以同一种颜色的相邻情况一定还相同。

但是多次修改矩阵后,这个性质还满足吗?

仍然满足,因为修改一次矩阵后任意两种颜色都满足相对相邻性的话,修改两次或更多次矩阵后也满足,就如同第一次修改一样,该性质可传递

所以 $k$ 不是 $4$ 的倍数时的做法确定了:

确定 $n$(前面说过了)

对于奇数行,$col_{i,j}\space =(\space (r+c)\mod n) +1$

对于偶数行,$col_{i,j}\space =(\space (r+c)\mod n) +n+1$

如果 $col_{i,j}$ 大于 $k$ 就减去 $n$。

其实就是稍微转化一下做法,对于偶数行,编号超过 $n$ 的颜色能放就尽量放。做法的重点是维护构造的相对相邻性

 #include <bits/stdc++.h>
using namespace std;
int main()
{
int k;
while (scanf("%d", &k) != EOF)
{
if (k <= )
{
printf("%d\n", k);
for (int i = ; i <= k; ++i) for (int j = ; j <= k; ++j)
printf("%d%c", i, " \n"[j == k]);
}
else
{
int n = (k + ) / * ;
printf("%d\n", n);
for (int i = ; i <= n; ++i) for (int j = ; j <= n; ++j)
{
int x;
if (i & ) x = (i + j) % n;
else x = n + (i + j) % n;
if (x >= k) x -= n;
printf("%d%c", x + , " \n"[j == n]);
}
}
}
return ;
}

Coloring Torus(Atcoder Grand Contest 030 C)的更多相关文章

  1. AtCoder Grand Contest 030题解

    第一次套刷AtCoder 体验良好 传送门 Poisonous Cookies cout<<b+min(c,a+b+); Tree Burning 难度跨度有点大啊 可以证明当第一次转向之 ...

  2. AtCoder Grand Contest 030 Solution

    A - Poisonous Cookies 签到. #include <bits/stdc++.h> using namespace std; #define ll long long l ...

  3. AtCoder Grand Contest 030 (AGC030) C - Coloring Torus 构造

    原文链接https://www.cnblogs.com/zhouzhendong/p/AGC030C.html 题解 才发现当时是被题意杀了. 当时理解的题意是“对于任意的 (i,j) ,颜色 i 和 ...

  4. Atcoder Grand Contest 030 F - Permutation and Minimum(DP)

    洛谷题面传送门 & Atcoder 题面传送门 12 天以前做的题了,到现在才补/yun 做了一晚上+一早上终于 AC 了,写篇题解纪念一下 首先考虑如果全是 \(-1\)​ 怎么处理.由于我 ...

  5. UPC个人训练赛第十五场(AtCoder Grand Contest 031)

    传送门: [1]:AtCoder [2]:UPC比赛场 [3]:UPC补题场 参考资料 [1]:https://www.cnblogs.com/QLU-ACM/p/11191644.html B.Re ...

  6. AtCoder Grand Contest 030 自闭记

    A:阅读. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> ...

  7. AtCoder Grand Contest 030 (AGC030) F - Permutation and Minimum 动态规划

    原文链接www.cnblogs.com/zhouzhendong/p/AGC030F.html 草率题解 对于每两个相邻位置,把他们拿出来. 如果这两个相邻位置都有确定的值,那么不管他. 然后把所有的 ...

  8. Atcoder Grand Contest 024 E - Sequence Growing Hard(dp+思维)

    题目传送门 典型的 Atcoder 风格的计数 dp. 题目可以转化为每次在序列中插入一个 \([1,k]\) 的数,共操作 \(n\) 次,满足后一个序列的字典序严格大于前一个序列,问有多少种操作序 ...

  9. AtCoder Grand Contest 031 简要题解

    AtCoder Grand Contest 031 Atcoder A - Colorful Subsequence description 求\(s\)中本质不同子序列的个数模\(10^9+7\). ...

随机推荐

  1. 如何使用TensorFlow Hub和代码示例

    任何深度学习框架,为了获得成功,必须提供一系列最先进的模型,以及在流行和广泛接受的数据集上训练的权重,即与训练模型. TensorFlow现在已经提出了一个更好的框架,称为TensorFlow Hub ...

  2. javascript日期函数

    时间对象是一个我们经常要用到的对象,无论是做时间输出.时间判断等操作时都与这个对象离不开.除开JavaScript中的时间对象外,在VbScript中也有许多的时间对象,而且非常好用.下面还是按照我们 ...

  3. Silverlight日记:动态操作Grid

    一,动态生成Grid public static Grid CreateGrid(List<T_METER> List) { var g = new Grid(); if (null == ...

  4. 解决cocos simpleAudioEngine播放mp3失败问题

    今天用cocos3.x版本实现游戏音乐播放发现一个坑,策划发来的mp3格式音频,用 simpleAudioEngine无法播放, 以为是路径问题,断点调试没找到,然后拷贝了cocos自带的mp3音频文 ...

  5. 洛谷 2023 [AHOI2009]维护序列

    洛谷 2023 [AHOI2009]维护序列 洛谷原题传送门 这个题也是一道经典的线段树模版(其实洛谷的模版二改一下输入顺序就能AC),其中包括区间乘法修改.区间加法修改.区间查询三个操作. 线段树的 ...

  6. JDBC操作数据库的详细步骤

    1.注册驱动 告知JVM使用的是哪一个数据库的驱动 2.创建连接 使用JDBC中的类,完成对MySQL数据库的连接 3. 得到执行sql语句的Statement对象 通过连接对象获取对SQL语句的执行 ...

  7. CentOS 7.4 基于LNMP搭建wordpress

    之前有好多次搭建wordpress的经历,有在Ubuntu系统上,有在CentOS7.2系统上,但都是搭完还是稀里糊涂的,因为好多都是教程上照着敲的.这次好好出个教程,以便以后方便查看. 准备工作:C ...

  8. 解决iPhone滑动不流畅问题

    前段时间在做一个手机端的页面时遇到了iOS上滑动不流畅的问题,后来才发现安卓上没有问题,才意识到这是兼容性问题引起的,所以遇到问题后快速定位到问题根源非常重要.在网上一搜就找到了解决方案.以后遇到类似 ...

  9. laravel连接数据库提示mysql_connect() :Connection refused...

    在.env配置文件中填写了正确的数据库连接配置的情况下连接还是出错了,明显提示的不是密码错误,那就看看端口吧, DB_HOST=127.0.0.1 DB_PORT= DB_DATABASE=test ...

  10. 【markdown】 markdown 语法

    介绍几个 markdown 语法学习地址和相关工具 参考链接 coding gitlab markdown offical markdown editor markdown editor2