链接:https://www.nowcoder.com/acm/contest/134/I
来源:牛客网
【题目】
合唱队形
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
铁子的班级在毕业晚会有一个合唱节目,到了毕业晚会的时候,他们必须排成一排一起合唱"认错","当然是选择原谅他"等一系列原谅歌曲,但是当队形布置好的时候,领导们觉得队形里最长的连续的女生的长度太小了,但是由于马上要开始演唱,所以最多只能两个人交换位置,问新队形中最长的连续的女生的长度是多少?
输入描述:
第一行一个数字n表示铁子班级的总人数。1≤n≤105第二行一个字符串s表示最初的队形布置,si=0表示第i个人是女生,si=1表示第i个人是男生。
输出描述:
输出一行表示答案输入
6 101010
输出
3
说明
将第6个女生和第3个男生交换位置可以满足要求
【题解】
用数组f[]记录每个男生前后的连续女生数,最后做个判断就好了。
【代码】
#include<bits/stdc++.h> using namespace std; int main() { int n,i,f[100005]; char a[100005]; memset(f,0,sizeof(f)); scanf("%d %s",&n,a); int ans=0,sum=0,k=0; for(i=0;i<n;i++) if(a[i]=='0') { sum++; f[k]++; } else k++; for(i=1;i<=k;i++) ans=max(ans,f[i-1]+f[i]); if(sum==n||ans==sum) printf("%d\n",sum); else printf("%d\n",ans+1); return 0; }