Educational Codeforces Round 11 C. Hard Process 前缀和+二分
2016-06-27 10:59
579 查看
题目链接:
http://codeforces.com/contest/660/problem/C题意:
将最多k个0变成1,使得连续的1的个数最大题解:
二分连续的1的个数x。用前缀和判断区间[i,i+x-1]里面0的个数是否小于等于k。代码:
#include<iostream> #include<cstdio> #include<vector> #include<cstring> using namespace std; const int maxn=3e5+10; int n,k; int sum[maxn],arr[maxn]; bool ok(int x,int &pos){ for(int i=0;i+x<=n;i++){ if(x-(sum[i+x]-sum[i])<=k){ pos=i+1; return true; } } return false; } int main(){ scanf("%d%d",&n,&k); for(int i=1;i<=n;i++){ scanf("%d",arr+i); } sum[0]=0; for(int i=1;i<=n;i++){ sum[i]=sum[i-1]+arr[i]; } int l=k,r=n+1,pos; while(l+1<r){ int mid=l+(r-l)/2; if(ok(mid,pos)) l=mid; else r=mid; } ok(l,pos); for(int i=pos;i<pos+l;i++){ arr[i]=1; } printf("%d\n",l); for(int i=1;i<n;i++) printf("%d ",arr[i]); printf("%d\n",arr ); return 0; }
相关文章推荐
- Python(八)进程、线程、协程篇
- 一次ora-600 ktubko_1故障简单分析
- ADB server didn't ack * failed to start daemon及unable to obtain result of 'adb versio错误
- 禁止Safari将数字识别成电话号码,增加特殊效果
- button标签在浏览器之间的小差别
- ssh 远程链接时出现错误提示:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED
- Access Violation(非法访问)错误的解决方法
- shell格式化时间戳的小技巧
- EventBus 的用法
- Java web Excel导出数据
- nginx使用篇
- Object.observe() js新特性
- Oracle 用户,角色,权限的sql语句
- 吐槽 Android 权限管理
- 利用Hadoop的FileSystem create方法获取 FSDataOutputStream 实现文件的上传
- Android NumberProgressBar:动态移动显示百分比进度的进度条
- 钉钉被叫停,影响不到VOIP,个人免费电话仍可继续
- Android NumberProgressBar:动态移动显示百分比进度的进度条
- 在EF中使用MySQL的方法及常见问题
- Fortran三种数组传递方式