链接:https://www.nowcoder.com/acm/contest/134/I
来源:牛客网
题目描述
铁子的班级在毕业晚会有一个合唱节目,到了毕业晚会的时候,他们必须排成一排一起合唱"认错","当然是选择原谅他"等一系列原谅歌曲,但是当队形布置好的时候,领导们觉得队形里最长的连续的女生的长度太小了,但是由于马上要开始演唱,所以最多只能两个人交换位置,问新队形中最长的连续的女生的长度是多少?
输入描述:
第一行一个数字n表示铁子班级的总人数。1≤n≤105
第二行一个字符串s表示最初的队形布置,si=0表示第i个人是女生,si=1表示第i个人是男生。
输出描述:
输出一行表示答案
示例1
说明
将第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 ",ans); } return 0; }