Codeforces Round #310 (Div. 2)-A. Case of the Zeros and Ones

           Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u 

Andrewid the Android is a galaxy-famous detective. In his free time he likes to think about strings containing zeros and ones.

Once he thought about a string of length n consisting of zeroes and ones. Consider the following operation: we choose any two adjacent positions in the string, and if one them contains 0, and the other contains 1, then we are allowed to remove these two digits from the string, obtaining a string of length n - 2 as a result.

Now Andreid thinks about what is the minimum length of the string that can remain after applying the described operation several times (possibly, zero)? Help him to calculate this number.

Input

First line of the input contains a single integer n (1 ≤ n ≤ 2·105), the length of the string that
Andreid has.
The second line contains the string of length n consisting only from zeros and ones.

Output

Output the minimum length of the string that may remain after applying the described operations several times.

input
4
1100

output
0

input
5
01010

output
1

input
8
11101111

output
6

Note
In the first sample test it is possible to change the string like the following: .
In the second sample test it is possible to change the string like the following: .
In the third sample test it is possible to change the string like the following: .

题意说明:这道题题意大概为给一个数n,输入一个由n个数字字符组成的字符串,一旦字符串含有10 01 就把它删除 重新就看不看符合规定不 当不含有10 01这两种情况 就输出此时字符串的长度

解题思路:首先这道题是肯定不能去暴力做了,因为给的n长度可以达20W,如果暴力一次一次删除再一次一次检查是绝对会超时的。其实不难想到开两个变量来记录0 1两个出现的次数 两个变量相减取绝对值就是最后字符串的长度了 如果不懂你可以慢慢想想是不是那么回事

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <map>
#include <cmath>
#include <queue>
using namespace std;
int n;
char str[200005];
int main()
{
    int m1,m2;
    while(~scanf("%d",&n))
    {
        m1=0,m2=0;//初始化计数
        scanf("%s",str);
        for(int i=0;i<n;i++)//因为for遍历一次 时间复杂度是O(n) 所以肯定是不会超时
        {
             if(str[i]=='1')
                m1++;//1的计数
             else if(str[i]=='0')
                m2++;//0的计数
        }
        printf("%d\n",abs(m1-m2));//最后删除01  10 的字符串长度
    }
    return 0;
}

END!!!!!!!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值