你正在为一部拥有黑白屏幕的手机开发一个应用程序。屏幕的 $x$ 坐标从左侧开始, $y$ 坐标从顶部开始,如插图所示。对于该应用程序,你需要各种不同尺寸的图像。你不想直接存储这些图像,而是希望使用手机的图形库来生成它们。你可以假设在开始绘制图像时,屏幕上的所有像素都是白色的。手机图形库中唯一的图形操作是 XOR(L, R, T, B),它将翻转以左上角坐标为 $(L, T)$、右下角坐标为 $(R, B)$ 的矩形区域内的像素值。其中 $L$ 代表左边界,$T$ 代表上边界,$R$ 代表右边界,$B$ 代表下边界。请注意,在其他一些图形库中,参数的顺序可能会有所不同。
作为一个例子,考虑 Figure-3 中的图像。对全白图像应用 XOR(2, 4, 2, 6) 可以得到 Figure-1 中的图像。对 Figure-1 的图像应用 XOR(3, 6, 4, 7) 可以得到 Figure-2 中的图像,最后对 Figure-2 的图像应用 XOR(1, 3, 3, 5) 即可得到 Figure-3 中的图像。
Figure-1, Figure-2, Figure-3
给定一组黑白图像,你的任务是使用尽可能少的 XOR 调用,从初始全白的屏幕生成每幅图像。你将获得描述这些图像的输入文件,你需要提交包含所需 XOR 调用参数的文件,而不是用于生成这些文件的程序。
输入格式
你将在名为 xor1.in 到 xor10.in 的文本文件中获得 10 个问题实例。每个输入文件的结构如下:
输入文件的第一行包含一个整数 $N$($5 \le N \le 2000$),表示图像有 $N$ 行和 $N$ 列。
接下来的各行自上而下表示图像的每一行。每行包含 $N$ 个整数:表示该行从左到右的像素值。这些整数要么是 $0$,要么是 $1$,其中 $0$ 表示白色像素,$1$ 表示黑色像素。
输出格式
你需要提交与给定输入文件相对应的 10 个输出文件。
第一行包含以下文本:
#FILE xor I
其中整数 $I$ 是对应输入文件的编号。
第二行包含一个整数 $K$:表示文件中指定的 XOR 调用次数。
接下来的 $K$ 行表示这些调用,按照从第一次调用到最后一次调用的顺序执行。这 $K$ 行中的每一行都包含四个整数:依次为 XOR 调用的参数 $L, R, T, B$。
样例
输入样例 1
7 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 1 0 0 0 1 0 1 0 1 1 0 1 0 1 0 1 1 0 0 1 0 0 1 1 0 0 0 1 1 1 1 0
输出样例 1
#FILE xor 0 3 2 4 2 6 3 6 4 7 1 3 3 5
评分方式
如果满足以下任一条件:
- 你的输出文件中指定的
XOR调用未能生成所需的图像,或 - 你的输出文件中指定的
XOR调用次数不等于 $K$,或 - 在你的输出文件中,$K > 40000$,或
- 你的输出文件包含满足 $L > R$ 或 $T > B$ 的
XOR调用,或 - 你的输出文件包含坐标不为正数(即 $\le 0$)的
XOR调用,或 - 你的输出文件包含坐标值超过 $N$ 的
XOR调用,
则你的该测试点得分为 0 分。否则,你的得分计算公式为:
$$1 + 9 \times \frac{\text{所有参赛者中的最佳答案调用次数}}{\text{你的答案中的调用次数}}$$
每个测试点的得分将四舍五入保留到小数点后一位。总得分将四舍五入到最接近的整数。
假设你提交了一个使用 $121$ 次 XOR 调用的解决方案。如果这是所有参赛者中最好的提交,你的得分将是 $10$ 分。如果所有参赛者提交的最佳解决方案使用了 $98$ 次 XOR 调用,你的得分将变为 $1 + 9 \times 98 / 121 \approx 8.289 \dots$,四舍五入后为 $8.3$ 分。