#P1028. 状态翻转与分组
状态翻转与分组
状态翻转与分组
题目描述
有 n 个元素,初始状态均为 1。接着,有以下操作流程:
-
先给定一个整数 k
-
系统会 任选 k 个元素,将它们的状态翻转(1 变 0),具体是哪 k 个未知 接下来,你需要为 每个元素 预先指定一个操作(共四种):
- 操作1:放入集合 A,不翻转
- 操作2:放入集合 A,并翻转
- 操作3:放入集合 B,不翻转
- 操作4:放入集合 B,并翻转
示例:当 n=5,操作序列为12341时:
- 元素1、2、5 放入集合A(2被翻转)
- 元素3、4 放入集合B(4被翻转)
对于操作后的状态,需要满足以下条件:
- 集合 A 中状态为 1 的元素数量 = 集合 B 中状态为 1 的元素数量
- 允许某个集合为空
- 只比较状态为 1 的数量
形式化的,给定 n 和 k,你需要输出一个长度为 n 的字符串,表示每个元素的操作(1-4); 对于你输出的字符串,你需要保证使得无论系统翻转哪 k 个元素,最终集合 A 和集合 B 中状态为 1 的元素数量相等。如果不存在这样的操作字符串,则输出 -1。
输入格式
一行两个整数 和 ( )。
输出格式
长度为 的有效操作字符串(使用字符 ),如果不可能,则为
样例 1
4 4
1234
提示
对于样例1: 我们一个可能的方案是:将第1个元素放入集合A不翻转(操作1),将第2个元素放入集合A翻转(操作2),将第3个元素放入集合B不翻转(操作3),将第4个元素放入集合B并翻转(操作4)。无论系统翻转哪4个元素,集合A和集合B中状态为1的元素数量都会相等。