您的位置:首页 > 其它

51nod 1396 还是01串 (思维or前缀和)

2017-07-13 22:22 197 查看
给定一个0-1串s,长度为n,下标从0开始,求一个位置k,满足0<=k<=n, 并且子串s[0..k - 1]中的0的个数与子串s[k..n - 1]中1的个数相等。 注意:
(1) 如果k = 0, s[0..k - 1]视为空串
(2) 如果k = n, s[k..n - 1]视为空串
(3) 如果存在多个k值,输处任何一个都可以

(4) 如果不存在这样的k值,请输出-1

Input
就一行,包含一个0-1串S,长度不超过1000000。


Output
题目要求的k值


Input示例
01


Output示例

1


思路:朴素的想法是利用前缀和记录01数量。

但有个更好的方法:

设所有数字和为sum,k位置断开,前半段和为i,后半段为sum - i;前半段有sum - i 个 0 (题设条件),有k - sum + i 个 1,由于和为i,所以 k - sum + i = i,得 k = sum
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  51nod