#qm01. 二进制串

二进制串

题目描述:

给定一个长度为 nn 的 01 串 S=S1S2SnS = S_1S_2 \dots S_n。你需要向每两个相邻的数字 SiS_iSi+1S_{i+1} 之间(共 n1n-1 个位置)各插入一个位运算符,使得生成的表达式最终运算结果为 00

可供选择的运算符共有三种,其运算规则如下:

  • 按位与(&):对于表达式 a & ba \ \& \ b,当且仅当 a=1a = 1b=1b = 1 时,结果为 11;否则为 00
  • 按位异或(^):对于表达式 aa ^ bb,当且仅当 aabb 不相同时,结果为 11;否则为 00
  • 按位或(|):对于表达式 a  ba \ | \ b,当且仅当 a=0a = 0b=0b = 0 时,结果为 00;否则为 11

注意,本题位运算优先级与 C 语言一致,规则如下:

  1. 按位与(&)的优先级最高。
  2. 按位异或(^)的优先级低于按位与,但高于按位或。
  3. 按位或(|)的优先级最低。
  4. 对于优先级相同的运算,按照自左向右的顺序结合计算。

你需要构造出一组合法的运算符序列,使得整个表达式最终的运算结果等于0。如果存在多种方案,输出任意一种即可。可以证明对于所有合法的输入总能找到至少一组合法的构造方案。

输入格式:

输入第一行包含一个正整数 n(2n105)n (2 \le n \le 10^5),表示字符串的长度。 第二行包含一个长度为 nn 且仅由字符 01 组成的字符串 SS

输出格式:

输出一行一个长度为 n1n-1 的字符串,代表依次插入的运算符(由字符 &^| 组成)。

输入样例 1:

3
000

输出样例 1:

&&

样例说明 1:

样例中原串为 000 ,可在中间加入两个按位与使表达式变为 0&0&0 ,其结果为 0 ,因此输出 &&