牛客小白月赛4——I—合唱队形

链接:https://www.nowcoder.com/acm/contest/134/I
来源:牛客网

题目描述

铁子的班级在毕业晚会有一个合唱节目,到了毕业晚会的时候,他们必须排成一排一起合唱"认错","当然是选择原谅他"等一系列原谅歌曲,但是当队形布置好的时候,领导们觉得队形里最长的连续的女生的长度太小了,但是由于马上要开始演唱,所以最多只能两个人交换位置,问新队形中最长的连续的女生的长度是多少?

输入描述:

第一行一个数字n表示铁子班级的总人数。1≤n≤10
5

第二行一个字符串s表示最初的队形布置,si=0表示第i个人是女生,si=1表示第i个人是男生。

输出描述:

输出一行表示答案
示例1

输入

复制
6
101010

输出

复制
3

说明

将第6个女生和第3个男生交换位置可以满足要求

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+5;
int L[maxn], R[maxn];
char a[maxn];
int main(){
    int n,tot=0;
    while(~scanf("%d %s",&n,a+1)){
        int ans=0;

        for(int i=1;i<=n;i++){
            if(a[i]=='0'){
                L[i]=L[i-1]+1;
                tot++;
            }
            else L[i]=0;
        }

        for(int i=n;i>=1;i--){
            if(a[i]=='0') R[i]=R[i+1]+1;
            else R[i]=0;
        }
        for(int i=1;i<=n;i++){
            if(L[i]==tot) ans=tot;
            else{
                ans=max(ans,L[i]+1);
            }
        }
        for(int i=2;i<=n;i++){
            int x=L[i-1]+R[i+1];
            if(x!=tot) ans=max(ans,x+1);
        }
        printf("%d\n",ans);
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/buerdepepeqi/p/9200890.html
今日推荐