0
点赞
收藏
分享

微信扫一扫

51Nod1396 还是01串


1396 还是01串

  1. 1 秒
  2. 131,072 KB
  3. 20 分
  4. ​​3 级题​​

给定一个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

解题思路

遍历出一共多少个0、1,记录每个位置的0、1的数量,比较就行了。特别注意的是:当全是0的时候,答案是0,全是1的时候,答案是串的长度。

AC代码

#include<iostream>
using namespace std;
struct node
{
int s0,s1;
}a[1000001];
int main()
{
string s;
cin>>s;
int sum0,sum1;
sum0=sum1=0;
int i,j;
for(i=0;i<s.length();i++)
{
if(s[i]=='0')
sum0++;
else
sum1++;
a[i].s0=sum0;
a[i].s1=sum1;
}
int flag=0;
for(i=0;i<s.length();i++)
{
if(a[i].s0==sum1-a[i].s1)
{
flag=1;
cout<<i+1<<endl;
break;
}
}
if(flag!=1)
{
if(sum0==s.length()) cout<<"0"<<endl;
else if(sum1==s.length()) cout<<s.length()<<endl;
else cout<<"-1"<<endl;
}
}

 

举报

相关推荐

0 条评论