#P16840. [GKS 2021 #A] Checksum
[GKS 2021 #A] Checksum
题目描述
Grace 和 Edsger 正在构造一个 的布尔矩阵 。第 行第 列的元素记为 。他们决定记下每一行和每一列的校验和(定义为给定元素列表的按位异或)。第 行的校验和记为 ,第 列的校验和记为 。
例如,若 ,,则 ,。
完成矩阵后,Edsger 将矩阵存储在电脑中。然而,由于病毒,Edsger 电脑中矩阵 的某些元素被替换成了 。幸运的是,Edsger 仍然记得校验和的值。他想恢复矩阵,并向 Grace 寻求帮助。经过调查,Grace 从磁盘恢复 的原始值需要花费 小时。给定最终的矩阵 、代价矩阵 以及每一行和每一列的校验和( 和 ),你能帮助 Grace 确定恢复原始矩阵 所需的最小总小时数吗?
输入格式
输入的第一行给出测试用例的数量 。接下来有 个测试用例。
每个测试用例的第一行包含一个整数 。
接下来的 行,每行包含 个整数,表示矩阵 。第 行的第 个元素表示 。
再接下来的 行,每行包含 个整数,表示矩阵 。第 行的第 个元素表示 。
下一行包含 个整数,表示行的校验和。第 个元素表示 。
再下一行包含 个整数,表示列的校验和。第 个元素表示 。
输出格式
对于每个测试用例,输出一行,格式为 Case #x: y,其中 是测试用例编号(从 开始), 是恢复矩阵 所需的最小小时数。
3
3
1 -1 0
0 1 0
1 1 1
0 1 0
0 0 0
0 0 0
1 1 1
0 0 1
2
-1 -1
-1 -1
1 10
100 1000
1 0
0 1
3
-1 -1 -1
-1 -1 -1
0 0 0
1 1 3
5 1 4
0 0 0
0 0 0
0 0 0
Case #1: 0
Case #2: 1
Case #3: 2
提示
在样例 #1 中, 可以通过第 行的校验和或第 列的校验和恢复。因此,Grace 无需花费任何时间恢复数据即可恢复矩阵。
在样例 #2 中,Grace 花费 小时恢复 。之后,她可以利用第 行的校验和恢复 ,利用第 列的校验和恢复 ,然后利用第 行的校验和恢复 。因此,Grace 只需花费 小时即可恢复矩阵。
在样例 #3 中,Grace 可以花费 小时恢复 ,再花费 小时恢复 。之后,她可以利用校验和恢复矩阵的其余部分。因此,Grace 总共花费 小时即可恢复矩阵。
限制条件
。
对于所有 ,。
对于 的 ,,否则 。
对于所有 ,。
对于所有 ,。
保证至少存在一种将 中的 替换为 或 的方式,使得 和 成立。
测试集 1
。
测试集 2
。
测试集 3
。
翻译由 DeepSeek V4 Pro 完成