“玲珑杯”线上赛 Round #15 咸鱼魔法记(尺取法)

来源:互联网 发布:数据库创建用户 编辑:程序博客网 时间:2024/05/17 07:22

DESCRIPTION

给你一个01串,我们定义这个串的咸鱼值,是最长的全1串。现在你最多可以使用K次咸鱼魔法,每次魔法,你可以使得一个位置翻转(0变成1,1变成0)。问你这个串的咸鱼值最多是多少。

INPUT
第一行两个整数N,K。表示串的长度和可以施展咸鱼魔法的次数。(N,K<=300000)第二行N个01整数。
OUTPUT
输出答案。
SAMPLE INPUT
10 21 0 0 1 0 1 0 1 0 1
SAMPLE OUTPUT
5


思路:尺取法推进区间的开头和末尾,注意区间开头的推进即可;


代码:

#include<bits/stdc++.h>using namespace std;int a[300007];int main(){    int n, k;    scanf("%d%d", &n, &k);    for(int i=0; i<n; i++)        scanf("%d",&a[i]);        int res=0;    int s=0,t=0,sum=0;      for(;;){          while(t<n&&sum<=k)              sum+=(a[t++]==0);            res=max(res,t-s-1);           if(t>=n)  break;                   for(;;){    if(a[s++]==0){       sum-=1;   break;    }}     }    printf("%d\n",res); return 0;}


阅读全文
1 0