b_51_还是01串(简单数学推导+特判)
给定一个0-1串s,长度为n,下标从0开始,求一个位置k,满足0<=k<=n,
并且子串s[0..k-1]中的0的个数与子串s[k..n-1]中1的个数相等
思路:假设s[0:i]有k个1,则s[i:n-1]有sum-k个1;
推出s[0:i]有k个1,则有i-k个0,则s[i:n-1]有sum-k个1,(因为总和=1的个数)
#include<bits/stdc++.h>
using namespace std;
int main() {
std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
string s; cin>>s;
int n=s.size(), sum=0, c=0;
for (int i=0; i<n; i++) if (s[i]=='1') sum++;
if (sum==n) return cout<<n, 0; //全1串的最后一个位置满足条件
if (sum==0) return cout<<0, 0; //全0串类似
for (int i=0; i<n; i++) {
if (s[i]=='1') c++;
if (i-c+1==sum-c) return cout<<i+1, 0;
}
return 0;
}