#P1304. 你说的对,但是被我 Hack 了

你说的对,但是被我 Hack 了

你说的对,但是被我 Hack 了

时间限制:2s

空间限制:256MB

题目描述

考虑以下问题:

现有 nnmm 列的矩阵,每个格子中写有一个数字 aija_{ij}

若两个 相邻 的格子 x,yx,y 上的数字满足:格子 xx 中的数字 小于 yy 中的数字,则 xx 可以走一步到达 yy

  • 相邻指的是两个格子位于同一行,且列号相差 11 ,或处于同一列,且行号相差 11 。特别地,若相邻的格子数字 相同,则它们 互相不可达

从左上角点 (1,1)(1,1) 出发,设一条路径的长度是路径中经过点的个数减 11。求所有从 (1,1)(1,1) 出发的路径中,路径长度的最大值。

(来源:南师大 2021 年 11 月程序设计竞赛 E 题)

例如,对于 3×33 \times 3 的矩阵

1 100 10000

15 140 10000

30 -50 0

答案就是 33,其中一条可行路径如下:(1,1)(2,1)(2,2)(2,3)(1,1)\to (2,1)\to (2,2)\to (2,3),分别经过 115140100001\to 15\to 140\to 10000

现在, pzr 打算使用广度优先搜索算法解决这个问题。算法流程可描述如下:

image-20231023182542597

该算法虽然在随机数据上表现较好,但在极端数据下表现不佳。

程序的效率大致与循环(外层 while 循环 和内层 for 循环)的总执行次数有关,请造一组 Hack 数据,使得网格的大小是给定的 n×mn \times m,且循环总执行次数 cntcnt 达到 limit=19260817limit=19260817 次以上。具体来说,将采用以下方法检查循环总执行次数。

image-20231023182555550

输入格式

矩阵的大小 n,mn,m

输出格式

nn 行,每行 mm 个数字,表示你构造的矩阵。

你需要保证矩阵的每个元素均为 [1,n×m][1, n\times m] 之间的正整数。(但是,并不需要保证各元素不同)

循环次数将按照上述方式统计。如果超过 limitlimit,则认为 Hack 成功。

如果有多种可行的构造方法,输出任意一种可行的即可。

样例输入1

10 10

样例输出1

1 2 3 4 5 6 7 8 9 10 
11 12 13 14 15 16 17 18 19 20 
21 22 23 24 25 26 27 28 29 30 
31 32 33 34 35 36 37 38 39 40 
41 42 43 44 45 46 47 48 49 50 
51 52 53 54 55 56 57 58 59 60 
61 62 63 64 65 66 67 68 69 70 
71 72 73 74 75 76 77 78 79 80 
81 82 83 84 85 86 87 88 89 90 
91 92 93 94 95 96 97 98 99 100

样例 1 解释

本测试点仅用于说明题意。nnmm 不满足数据范围中的限定。

若按此方法构造,循环执行次数为 cnt=280cnt = 280

样例输入2

5000 5000

样例输出2

1 2 3 ... 5000
5001 5002 ... 10000
...  ...
...  ... 25000000

样例 2 解释

上面给出了一种构造方法,按行优先顺序依次摆放 1,2,5000×50001,2,\cdots 5000\times 5000,循环总运行次数为 74990000。

对于 n, m 更小的情况,可能需要其他的构造方法。

数据范围与约定

共包含三个测试点,前两个测试点 30 分,最后一个测试点 40 分。

第一组测试点满足 n=m=3000n=m=3000

第二组测试点满足 n=400,m=500n=400, m =500

第三组测试点满足 n=m=80n=m=80