【題解】黑白奶牛
阿新 • • 發佈:2019-02-05
必須 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; }
【題解】黑白奶牛