2 条题解
-
2
题意
给你两串由 '0' 和 '1' 构成的字符串 a 和 b,你可以对 a 串进行操作,在一次操作之中,你可以选择 01 串前缀中01数量相等的前缀,使其字母颠倒(0 变成 1 , 1 变成 0)。
现在你可以进行任意次操作,问你能否让 a和 b 两个字符串相等。
思路
因为可以进行任意次操作,所以只要选择的前缀01数量相同无论如何都可以转回来,所以重点就在01的数量是否相同。
所以可以在从前都后进行遍历的时候计算前缀中01的数量,当遍历时遇到:
(1)a[i]==b[i]&&a[i+1]!=b[i+1] (2)a[i]!=b[i]&&a[i+1]==b[i+1]
上述两种情况就代表此时字符串 1~i 的前缀必须要进行一次翻转,则此时判断 a 串 1~i 的前缀中01个数是否相同,若不相同则代表不能翻转,则中止遍历,输出 NO,若相同就代表此时可以翻转,继续向后遍历,直到遍历结束输出 YES 或在遇到上述输出 NO 的条件的情况下中止遍历输出 NO。
-
0
ys的01串
题意描述
ys手中有两个个长度为 的 串,ys想让这两个 串相等,现在 赐予你一种能力。
在一次操作之中,你可以选择 串的任意前缀,使其字母颠倒( 变成 , 变成 )。
问你能否让两个字符串相等。
思路
本题难度在本场比赛之中较大
题意简单描述就是给了两个 串,我们可以对第一个串进行操作。
操作的步骤是,你选择任意长度的前缀,需要满足这个前缀内字符 和 的数量是相同的,之后将 全部变成 , 全部变成 。
因此经过一段推理可以得到一些简单的结论。
若第一个字符串中 的个数不等于第二个字符串中 的个数,则一定不能转化。
之后可以判断每个不相同的字符满不满足前面的(包括自身) 的个数等于 的个数。
代码实现的难度体现在两点。
一是对于不相同字符串的判定。
若是选择了一旦有不相同的字符串就进行判断前面两数的个数,这样子的话连样例都过不了,因为有些字符串是连在一起变化的。经过仔细观察应该能找出如何判断这些字符串是不是连在一起的,通过判断不相等的字符前一位来判断是不是一个串。若前面的字符相同,则这个字符就是串的开头(反向),则这个开头应该满足1的个数等于0的个数。
二是不仅仅要判断A中1的个数和0的个数,还要判断B中1的个数和0的个数,只有两者都满足的时候才能往下进行。
若没有考虑到这两点,或者仅仅考虑到1没有考虑到2。如下额外错误的数据会有输出YES的情况。
10010101 11000101
- 1
信息
- ID
- 1026
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 85
- 已通过
- 11
- 上传者