2018蓝桥杯校选复现9

题目

White Album(WA2)决定要动画化了,所以诚招一批白学家参与工作。 现在有n个白学家站成一排,其中有冬马党(用1表示),还有雪菜党(用0表示)。为了让最后制作出来的动画不偏向于其中任何一个女主,工作组希望从中选出一段连续的区间,使得冬马党和雪菜党的人数一样多。同时人要越多越好,这样人均工作量会减少很多。 现在要求你计算最多可以招纳多少人。

输入格式:

第一行是报名参加工作的白学家人数n(1 <= n <= 100000)
第二行就是一个长度为n的字符串,只包含0(雪菜党)和1(冬马党)

输出格式:

如果不能找到满足题意的区间,就输出0,否则输出最多可以招纳的人数

输入样例1:

8
11010111

输出样例1:

4

输入样例2:

3
111

输出样例2:

0

代码


#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    string s;
    int n;
    cin>>n;
    cin>>s;
    int a[100005]={0};
    for(int i=0;i<n;i++)
        if(s[i]=='0')
            a[i]=-1;
        else
            a[i]=1;
    int b[100005]={0};
    for(int i=0;i<n;i++)
        for(int j=0;j<=i;j++)
            b[i]+=a[j];
    int ans=0,l=0;
    for(int i=0;i<n;i++)
        if(b[i]==0)
            ans=i+1;
    for(int i=0;i<n;i++)
    {
        for(int j=i+1;j<n;j++)
            if(b[i]==b[j])
                l=j-i;
        if(ans<l)
            ans=l;
    }
    cout<<ans<<endl;
    return 0;
}

分析

  1. 把0看出-1,从左往右相加,如果出现相同值,说明在这一段区间是相加和为0;如输入样例1:

    1 1 0 1 0 1 1 1 -->
    1 1 -1 1 -1 1 1 1 -->
    1 2 1 2 1 2 3 4
    显然最远的两个1相距4。

  2. 但是当出现0时要注意了如:
    1 1 0 0
    1 1 -1 -1
    1 2 1 0 出现0说明前面区间都满足!!!

发布了21 篇原创文章 · 获赞 4 · 访问量 789

猜你喜欢

转载自blog.csdn.net/u011025050/article/details/103267421
今日推荐