1396 还是01串
给定一个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
输入
就一行,包含一个0-1串S,长度不超过1000000。
输出
题目要求的k值
输入样例
01
输出样例
1
暴力枚举,注意特殊情况
#include<iostream> #include<algorithm> using namespace std; int f[1000005]; int main(){ string a; cin>>a; int la=a.size(); for(int i=0;i<la;i++){ if(a[i]=='0') f[i+1]=f[i]+1; else f[i+1]=f[i]; } if(f[la]==0){ cout<<la<<endl; return 0; } for(int i=1;i<=la;i++){ if(f[i-1]==(la-i+1-(f[la]-f[i-1]))) cout<<i-1<<endl; } return 0; }