解题思路
关键观察
把整张 n×m 的网格按“蛇形路径(snake)”依次走过(第一行从左到右,第二行从右到左,第三行再从左到右……),就得到了一条基于四相邻的哈密顿路径:相邻访问的两个格子一定四邻接。
若令每个编号占据相同长度的一个连续片段,那么该编号对应的格子集合就是这条路径上的一个连续段,因此天然是连通的。
已知 k∣(n⋅m),设
P3667.第1题-网格填数挑战
题目内容
给定整数 n、m、k ,请你在 n 行 m 列的网格中填入整数,使得:
-
每个格子填入的整数在 1 到 k 之间;
-
每个整数恰好出现 kn⋅m 次;
-
对于每个 a∈[1,k] ,编号为 a 的格子构成的连通块(基于四相邻)是连通的。
名词解释:四相邻:在这里,当 丨x−x′丨+丨y−y′丨==1时,单元格 (x,y) 和 (x′,y′) 被认为是相邻的。
输入描述
第一行输入一个整数 t(1≤t≤104) ,表示测试用例数。
接下来 t 行,每行输入三个整数 n、m、k ,满足(2≤n⋅m≤2×105)、且 n⋅m=0(mod k),保证所有测试用例中 ∑n⋅m≤3×105 。
输出描述
对于每个测试用例,输出 n 行,每行 m 个整数,表示一种满足条件的网格填充方案。如果存在多个解决方案,你可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
样例1
输入
2
2 2 2
2 4 2
输出
1 1
2 2
1 1 1 1
2 2 2 2
说明