#P16712. 棋盘
棋盘
题目描述
有一个 行 列的棋盘,其中一些格子已经被挖去。
你要使用蓝色和黄色两种染料粉刷棋盘。先给每一行涂一层颜色,再给每一列涂一层颜色,因此每个未被挖去的格子都会被涂两次。
令第 行所使用染料的颜色为 ,第 列所使用染料的颜色为 。每种颜色只能是蓝色或黄色。
部分 和 已经确定,其余颜色由你决定。
对于一个未被挖去的格子 :
- 若 ,两次染料颜色相同,该格子不会变成绿色;
- 若 ,蓝色和黄色混合,该格子会变成绿色。
你的目标是使所有未被挖去的格子最终均为绿色。在涂色之前,你可以执行若干次以下操作:
- 选择一行或一列,将这一整行或这一整列的所有格子挖去。
请最小化操作次数,并输出一种合法方案。
输入格式
第一行输入两个正整数 。
接下来 行,每行输入一个长度为 、仅包含字符 0 和 1 的字符串 :
- 表示格子 已经被挖去;
- 表示格子 尚未被挖去。
接下来一行输入一个长度为 、仅包含字符 0、1 和 2 的字符串 :
- 表示第 行必须使用蓝色染料;
- 表示第 行必须使用黄色染料;
- 表示第 行的颜色尚未确定。
最后一行输入一个长度为 、仅包含字符 0、1 和 2 的字符串 :
- 表示第 列必须使用蓝色染料;
- 表示第 列必须使用黄色染料;
- 表示第 列的颜色尚未确定。
输出格式
第一行输出一个非负整数 ,表示最少操作次数。
第二行输出一个长度为 、仅包含字符 0 和 1 的字符串,表示所有行最终使用的颜色。字符 0 表示蓝色,字符 1 表示黄色。
第三行输出一个长度为 、仅包含字符 0 和 1 的字符串,表示所有列最终使用的颜色。字符 0 表示蓝色,字符 1 表示黄色。
输出的颜色必须与输入中已经确定的颜色一致。
接下来输出 行,每行包含两个整数 ,表示一次挖除操作:
- 时,挖去第 行,此时 ;
- 时,挖去第 列,此时 。
完成所有操作后,对于每个仍未被挖去且原本满足 的格子 ,必须有 。
由于本题采用 Special Judge,只要操作次数最少且方案合法,输出任意一种方案均可。
样例 1
2 3
011
101
02
102
1
00
101
1 2
样例 1 解释
该方案挖去了第 列,并将第 行确定为蓝色、第 列确定为黄色。
下面也是一种合法输出:
1
00
101
0 1
该方案改为挖去第 行。可以证明,最少操作次数为 。
样例 2
2 3
111
111
02
122
0
00
111
样例 2 解释
不需要挖去任何行或列。可以证明该样例的最少操作次数为 。
数据范围
对于所有测试数据:
- ;
- ;
- 。
原题各测试点特殊性质如下:
| 测试点编号 | 特殊性质 |
|---|---|
| 对所有 ,均有 | |
| ,且满足特殊性质 A | |
| 对所有 ,均有 | |
| 无特殊性质 |
特殊性质 A:每个 在集合 中均匀随机选取,每个 在集合 中均匀随机选取。