1. 程式人生 > >【題解】黑白奶牛

【題解】黑白奶牛

必須 space code clas john std urn spa 黑白

題目描述

有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

輸入樣例二

11 1

1 1 0 0 1 1 1 1 0 1 1

輸出樣例二

7

說明

樣例說明

樣例一說明:由於K=0,所以不能使用魔法棒,所以挑選編號是5至8的奶牛去參加晚會。

樣例二說明:由於K=1,所以最多可以使用1次魔法棒,使用魔法棒把第9頭奶牛變成白色奶牛,然後挑選編號是5至11的奶牛去參加晚會。

題解

暴力尺取法遍歷區間一遍即可,用魔法棒時就--k,恢復時就++k。

#include<iostream>
#include<string>
using namespace std;
int n,k,color[100000000],a[100000000],sum,smax;
int main()
{
    cin
>>n>>k; for(int i=1;i<=n;i++) { cin>>color[i]; a[i]=a[i-1]; if(color[i]==0) a[i]++; } for(int l=0,r=1;r<=n;r++) { if(a[r]-a[l]<=k) { sum++; if(r==n&&sum>smax) smax=sum; } else { if(sum>smax) smax=sum; l++; } } cout<<smax; return 0; }

【題解】黑白奶牛