P8167 [eJOI 2021] XCopy
题目描述
给定正整数 $N,M$。
请构造一个 $N \times M$ 的只包含非负整数的矩阵,使得每个元素互不相同且相邻(上下左右)元素在二进制下只有一位不同,同时保证矩阵的最大元素最小。
输入格式
一行两个正整数 $N,M$。
输出格式
一个 $N \times M$ 的只包含非负整数的矩阵。**Special Judge 对输出格式要求非常严格,每行行末不能有空格等多余字符。**
说明/提示
#### 评分规则
本题采用部分分计分,分数取决于输出答案和正确答案的大小。其中「答案」指的是矩阵中的最大元素。
设 $S$ 为该测试点的总分,$O$ 为正确答案。那么当 $G$ 为输出答案时,得分为:
$$S \times \max(1-\sqrt{\dfrac{\frac{G}{O}-1}{3}},0)$$
由于洛谷评分机制,每个测试点的实际得分为上式下取整的结果,即 $\lfloor S \times \max(1-\sqrt{\dfrac{\frac{G}{O}-1}{3}},0) \rfloor$。例如,当 $S=7,G=15,O=10$ 时,按上式得分约为 $4.14$ ,但在洛谷上得分为 $4$。
如果输出矩阵不满足要求(即元素互不相同且相邻元素在二进制下只有一位不同),那么该测试点计 $0$ 分。
注意,由于 Special Judge 对于格式要求较高,请在输出答案时**不要在每行末尾添加多余空格**,否则对应测试点会被计为 $0$ 分。另外,请不要输出超出 $[0,2^{63})$ 范围(long long)的整数,否则会被判为格式错误,计 $0$ 分。
#### 样例解释
样例矩阵如下:
|$0101_2=5_{10}$|$0100_2=4_{10}$|$0110_2=6_{10}$|
| :----------: | :----------: | :----------: |
|$0001_2=1_{10}$|$0000_2=0_{10}$|$0010_2=2_{10}$|
|$1001_2=9_{10}$|$1000_2=8_{10}$|$1010_2=10_{10}$|
通过观察不难发现,每两个相邻元素在二进制下都只有一位不同。这种做法的答案为 $10$(即最大元素),是所有做法中最小的。当然,其它的最大元素为 $10$ 的矩阵也是符合题意的(例如将输入矩阵进行翻转操作等)。
一种可以获得部分分的做法是:
|$0110_2$|$0111_2$|$0101_2$|
| :----------: | :----------: | :----------: |
|$1110_2$|$1111_2$|$1101_2$|
|$1010_2$|$1011_2$|$1001_2$|
该矩阵的最大元素为 $15$。根据评分规则,这种做法在下取整前可以获得对应测试点 $\max(1-\sqrt{\dfrac{\frac{15}{10}-1}{3}},0)=1-\dfrac{\sqrt{6}}{6} \approx 59\%$ 的分数。
#### 数据规模与约定
**本题采用捆绑测试。**
- Subtask 1(7 pts):$N=1$。
- Subtask 2(9 pts):$N,M$ 是 $2$ 的整数幂。
- Subtask 3(14 pts):$N$ 是 $2$ 的整数幂。
- Subtask 4(70 pts):无特殊限制。
对于 $100\%$ 的数据,$1 \le N,M \le 2000$。
#### 说明
本题译自 [eJOI2021](https://sepi.ro/ejoi/2021) Day 1 C XCopy。欢迎通过私信或发帖的方式对自行编写的 [Special Judge](https://www.luogu.com.cn/paste/cbrnaqp0) 进行 hack。