51nod 2494 最长配对

小b有一个01序列,她想找到一个最长的区间使得这个区间的01能两两配对,即0的个数和1的个数相等。求最长区间的长度。

 

输入

第一行一个正整数n,表示数组长度,其中0<n≤50000;
第二行n个0或1,以空格隔开。

输出

输出一个数,表示最长区间的长度

输入样例

3
0 1 0

输出样例

2

枚举
代码:
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <algorithm>

using namespace std;
int n;
int s[50000];
int main() {
    scanf("%d",&n);
    int c = 0,m = 0;
    for(int i = 0;i < n;i ++) {
        scanf("%d",&s[i]);
        c += (s[i] == 0) ? -1 : 1;
        int cc = c;
        for(int j = 0;j < i;j ++) {
            if(cc == 0) {
                m = max(m,i + 1 - j);
                break;
            }
            cc -= (s[j] == 0) ? -1 : 1;
        }
    }
    printf("%d",m);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/8023spz/p/10890938.html
今日推荐