- 原题链接: Problem - C - Codeforces
-
题意
- 给定一串二进制字符串,要求做如下操作(不超过三百次)
- 对字符中任意位置插入 “01” 串
- 使得字符称为对称位置字符不同的字符串 即
- 给定一串二进制字符串,要求做如下操作(不超过三百次)
-
思路
- 模拟 不要每次一进来就像不要模拟题目要求的变化过程
- 查找规律,发现只要是前串中的 0 数量与 1 数量分别与后串中的 1 数量与 0 数量相等,就有解
- 因为每次插入 01 串,会使得一个0 或者一个 1 进到另一边,自己失去一个0或1,同时添上01,则证明此时自己这一边的串会加上1或0,对面加上相反的0或1,要实现两边对称不同,则操作后两边的01数量相反相等,所以操作前两边01数量要相同
- 然后查找
- 如果
s[l] = s[r] = '0
为了不同,在r处插入”01” - 如果
s[l] = s[r] = 1
为了不同,在l处插入”01” - 模拟这个过程直到
l>=r
退出
- 如果
- 查找规律,发现只要是前串中的 0 数量与 1 数量分别与后串中的 1 数量与 0 数量相等,就有解
- 模拟 不要每次一进来就像不要模拟题目要求的变化过程
-
实现代码