Hard Process
来源:互联网 发布:淘宝千里眼怎么用 编辑:程序博客网 时间:2024/05/29 11:45
Hard Process CodeForces - 660C
You are given an array a with n elements. Each element of a is either0 or 1.
Let's denote the length of the longest subsegment of consecutive elements ina, consisting of only numbers one, asf(a). You can change no more thank zeroes to ones to maximize f(a).
The first line contains two integers n andk (1 ≤ n ≤ 3·105, 0 ≤ k ≤ n) — the number of elements ina and the parameter k.
The second line contains n integers ai (0 ≤ ai ≤ 1) — the elements ofa.
On the first line print a non-negative integer z — the maximal value off(a) after no more than k changes of zeroes to ones.
On the second line print n integers aj — the elements of the arraya after the changes.
If there are multiple answers, you can print any one of them.
7 11 0 0 1 1 0 1
41 0 0 1 1 1 1
10 21 0 0 1 0 1 0 1 0 1
51 0 0 1 1 1 1 1 0 1
题意:给一个数列,数列中元素只有 1 和 0 。该数列可以把 0 改成 1,最多改变 k 个。经过更改后得到一个最大连续的子数列,数列中所有的元素都为 1 ,输出该子数列的长度并输出更改后的数列。
思路:二分法,本人先是二分再循环,二分最大长度,但判断时使用了双重循环,故超时了。网上看了点击打开链接这个博客受到了启发。运用了nlogn的形式,先进行循环,在二分。
代码:
#include<stdio.h>int a[300005], sum[300005];int main(){int n, k, i, l, r, mid, s, e, max;while (~scanf("%d%d", &n, &k)){sum[0] = max = 0;for (i = 1; i <= n; i++){scanf("%d", &a[i]);sum[i] = sum[i - 1] + a[i];}for (i = 1; i <= n; i++)//从第一个开始,二分得出从此开始能够得到最大长度,得到最大的并记录该子数列初末地址{l = 0, r = n - i + 2, mid = (l + r) / 2;while (r - l > 1){if (sum[i + mid - 1] - sum[i - 1] + k >= mid) l = mid;else r = mid;mid = (l + r) / 2;}if (l > max) {max = l;s = i;e = i + max - 1;}}printf("%d\n", max);for (i = 1; i <= n; i++){if (i >= s && i <= e) printf("1 ");else printf("%d ", a[i]);}printf("\n");}return 0;}
- Hard Process
- C. Hard Process
- CF_660C Hard Process(二分)
- Hard Process 二分搜索
- cf Hard Process
- Hard Process CodeForces
- Process of Oracle Hard Parse
- CodeForces 660C Hard Process
- codeforces 660C Hard Process
- codeforces 660C Hard Process
- [尺取法] CF660 C.Hard Process
- Codeforces 660C Hard Process 【二分】
- codeforces_660C. Hard Process(尺取法)
- CodeForces 660C Hard Process (队列)
- Hard Process 没找到原题。。。
- Codeforces 660C Hard Process【二分 Or 尺取】
- Codeforces--660A--Hard Process(二分好题)
- CodeForces - 660C Hard Process (二分)好题
- 9月21日
- View的事件分发机制
- Android进阶三:自定义View
- 数学逻辑习题集(2)
- SpringCloud(第 014 篇)电影 Ribbon 微服务集成 Hystrix 断路器实现失败快速响应,达到熔断效果
- Hard Process
- 面向对象程序设计上机练习一(函数重载)
- 实现深度优先方式遍历树
- 前端书籍推荐
- hdu1008
- Security 4.0 CAS实现单点登录
- Java学习笔记02
- 查看hive分区挂载的路径
- 机器学习教程 之 朴素贝叶斯分类器:判别皮马印第安糖尿病人数据集