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
1100output
0input
5
01010output
1input
8
11101111output
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!!!!!!!!!!!!