#CF2089D. 条件运算符
条件运算符
D. 条件运算符
每个测试点时间限制:2 秒
内存限制:256 兆字节
在 C++ 中,三元条件运算符 ?: 的值为:若 为真,则 x?y:z 的值为 ;否则为 。其中 、、 本身也可以是表达式。该运算符右结合,即 a?b:c?d:e 等价于 a?b:(c?d:e)。 表示假, 表示真。
给定一个长度为 的 01 字符串,你需要判断是否存在一种方式,在字符串中插入 个三元条件运算符(以及必要的括号),使得最终的表达式值为 。你可以任意添加括号,但原字符串中字符的顺序必须保持不变。
例如:字符串 10101 可以转换为 (1?0:1)?0:1,其值为 。
输入格式
第一行包含一个整数 (),表示测试用例数量。每个测试用例描述如下:
- 第一行一个整数 ()。
- 第二行一个长度为 的二进制字符串。
保证所有测试用例的 之和不超过 。
输出格式
对于每个测试用例:
- 第一行输出
Yes或No,表示能否得到值为 的表达式。 - 如果答案是
Yes,则在第二行输出该表达式。你可以使用括号,但不能改变原字符串中字符的相对顺序。你的表达式长度不能超过 。
示例输入
2
2
10101
2
00000
示例输出
Yes
(1?0:1)?(0):1
No
提示
- 第一个测试用例即题目描述中给出的例子。
- 第二个测试用例显然无论怎样使用条件运算符,结果总是 。