题目描述
小 Q 面前的桌子上有 N 个硬币,0 表示正面,1 表示反面,现在他有一次机会可以选择一个 ai~bi 的段,把这个段的硬币都翻转一面,他现在想知道 N 个硬币中最多可以有多少个硬币正面朝上。
输入
第一行一个整数 N,表示桌子上有 N 个硬币。
第二行为 N 个 0 和 1,表示硬币 i 的状态。其中 0 表示正面,1 表示反面。
输出
第一行有一个整数,表示翻转后最多有多少个硬币正面朝上。
样例输入 Copy
4 1 0 1 1
样例输出 Copy
3
提示
【样例解释】
将 1 0 1 1 可以改为 0 1 0 0 或 1 0 0 0
【数据范围】
30%的数据 1 <= N <=100
60%的数据 1 <= N <=10^4 。
100%的数据 1 <= N <=10^6。
#include<iostream>
#include<fstream>
#include<algorithm>
using
namespace
std;
long
long
n,a[1000000],x,y,m,s;
int
main()
{ cin>>n;
for
(
int
i=1;i<=n;i++)
{
cin>>a[i];
if
(a[i]==0) s++;
}
int
t=0;
for
(
int
i=1;i<=n;i++)
{
if
(a[i]==1) t++;
else
t--;
if
(t>m) m=t;
if
(t<0) t=0;
}cout<<m+s;
return
0;
}