黑白奶牛(类似滑动窗口,贪心扫一遍)

黑白奶牛

时间限制: 1 Sec  内存限制: 128 MB

题目描述

有N只奶牛从左往右排成一行,编号是1至N。这N只奶牛当中,有一些奶牛是黑色的,其余的是白色的。
color[i]表示第i只奶牛的颜色,如果color[i]=0则表示第i头奶牛是黑色的,如果color[i]=1则表示第i头奶牛是白色的。
六一奶牛儿童节快到了,农场主Farmer John要从这N头奶牛当中,挑选尽可能多的奶牛去参加晚会。
Farmer John挑选奶牛的原则是:挑选编号是连续的一段奶牛,这一段奶牛的颜色必须全部是白色的。
Farmer John有一个魔法棒,每用一次魔法棒就可以把一头黑色的奶牛变成一头白色的奶牛,魔法棒最多只能使用K次。
在上述条件下,最多可以有多少头奶牛去参加晚会呢?

 

输入

第一行,两个整数,N和K。
第二行,N个整数,第i个整数就是color[i],color[i]要么是0,要么是1。

 

输出

一个整数,表示最多有多少头奶牛可以去参加晚会。

 

样例输入

复制样例数据

11  0
1  1  0  0  1  1  1  1  0  1  1

样例输出

4

 

提示

由于K=0,所以不能使用魔法棒,所以挑选编号是5至8的奶牛去参加晚会。

对于50%的数据,1 <= N <= 1000,K = 0,即不能使用魔法棒。
对于100%的数据,1 <= N <= 100000,  1 <= K <=N。

 

#include<bits/stdc++.h>
using namespace std;
 
int  n, k;
int a[100005];
 
int main(){
    scanf("%d %d", &n, &k);
    a[0] = 1;
    for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
    int l = 1, r = 1;
    int cnt = 0, ans = 0;
    while(r <= n){
        if(a[r++] == 0) cnt++;
        while(cnt > k){
            if(a[l++] == 0) cnt--;
        }
        ans = max(ans, r - l);
    }
    printf("%d\n", ans);
}
/**************************************************************
    Problem: 9743
    User: Xzit02
    Language: C++
    Result: 正确
    Time:12 ms
    Memory:2412 kb
****************************************************************/

 

全部评论

相关推荐

感性的干饭人在线蹲牛友:🐮 应该是在嘉定这边叭,禾赛大楼挺好看的
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务