51Nod1396 还是01串

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_42391248/article/details/86917774

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;
	}	
} 

猜你喜欢

转载自blog.csdn.net/qq_42391248/article/details/86917774