题意:
- 最多改变k个0为1,是连续的1的个数最大。
- 输出反转的个数,和反转后的序列。
题解:尺取法
代码
#include <bits/stdc++.h>
using namespace std;
int const N = 300000 + 10;
int n,k;
int a[N];
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
int l = 1,r = 0,rr = 0,ll = -1,cnt = 0; //注意初始化
while(r <= n){
if(rr - ll < r - l){
rr = r;
ll = l;
}
if(a[++r] == 0) cnt++;
while(cnt > k){
if(a[l++] == 0) cnt--;
}
}
printf("%d\n",rr-ll+1);
for(int i=1;i<=n;i++){
if(ll <=i && i <= rr) printf("%d ",1);
else printf("%d ",a[i]);
}
cout<<endl;
return 0;
}