CF1275E1 Контрольная сумма
题目描述
VKontakte 用户的数据分布存储在数以万计的服务器中。为了确保在写入数据时能够检测到错误,系统会定期将当前的 CRC32 校验和(参考 [Wiki](https://en.wikipedia.org/wiki/Cyclic_redundancy_check), IEEE 802-3)写入磁盘。这样,我们可以在读取数据时重新计算校验和,以检查数据和校验和是否正确。
虽然后台大多数服务都集成了校验和验证,但有一次,我们需要在一个数据段中将四个连续字节的值改为新的值,即将序列 $a_i, a_{i+1}, a_{i+2}, a_{i+3}$ 替换为 $x_0, x_1, x_2, x_3$。同时,要求保持 CRC32 校验和不变。显然,更改序列的字节值会导致校验和变化,因此除了替换这四个字节,还可以随意更改另外四个字节 $a_j, a_{j+1}, a_{j+2}, a_{j+3}$。你的任务是为这些字节选择新的值,使得整个序列的 CRC32 校验和保持不变,或者判断这种修改是否可能。如果判断出来可能性,输出所有的可能值。
需要注意的是,在本版本的测试中,只有一个测试用例,其参数为 $n=16, q=8$。你可以从 [这里](https://drive.google.com/open?id=1amqCbAtMZwdrd5cXFrw80wXELEv_2PKb) 下载。你的方案无需通过文中提供的测试用例,并且不会在这些测试用例上进行验证。如果想在这些条件下进行测试,请到问题 E3 提交你的方案,其中前两个测试用例与本题中的示例相对应。
输入格式
第一行包含两个整数 $n$ 和 $q$,分别表示文件中的字节数及需要处理的查询数($8 \le n \le 2 \cdot 10^5$;$1 \le q \le 10^5$)。
第二行是 $n$ 个数字 $a_0, a_1, \ldots, a_{n-1}$,表示文件中每个字节的值($0 \le a_i \le 255$)。
接下来的 $q$ 行,每行包含六个整数 $i, j, x_0, x_1, x_2, x_3$。这表示从位置 $i$ 开始的四个字节需要替换为 $x_0, x_1, x_2, x_3$,同时从位置 $j$ 开始的四个字节可以被任意更改($0 \le i, j \le n-4$;$0 \le x_0, x_1, x_2, x_3 \le 255$)。保证序列区间 $[i; i+3]$ 和 $[j; j+3]$ 没有交叉。
输出格式
对于每个查询,输出四个整数 $z_0, z_1, z_2, z_3$,表示替换位置 $j, j+1, j+2, j+3$ 的四个字节后的值,使得 CRC32 校验和不改变。所有查询相互独立,实际并不修改序列。
如果有多个解,输出任意一个;如果无法找到满足条件的解,输出 `No solution`。
**本翻译由 AI 自动生成**