博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Gym - 100989G (二分法)
阅读量:5096 次
发布时间:2019-06-13

本文共 2854 字,大约阅读时间需要 9 分钟。

There are K hours left before Agent Mahone leaves Amman! Hammouri doesn't like how things are going in the mission and he doesn't want to fail again. Some places have too many students covering them, while other places have only few students.

Whenever Hammouri commands a student to change his place, it takes the student exactly one hour to reach the new place. Hammouri waits until he is sure that the student has arrived to the new place before he issues a new command. Therefore, only one student can change his place in each hour.

Hammouri wants to command the students to change their places such that after K hours, the maximum number of students covering the same place is minimized.

Given the number of students covering each place, your task is to find the maximum number of students covering the same place after K hours, assuming that Hammouri correctly minimizes this number.

Input

The first line of input contains two integers M (2 ≤ M ≤ 105) and K (1 ≤ K ≤ 109), where M is the number of places and K is the number of hours left before Agent Mahone leaves Amman.

The second line contains M non-negative integers, each represents the number of students covering one of the places. Each place is covered by at most 109 students.

Output

Print the maximum number of students covering a place after K hours, assuming that Hammouri minimized this number as much as possible in the last K hours.

Examples

Input
5 4 3 4 1 4 9
Output
5
Input
2 1000000000 1000000000 4
Output
500000002
Input
5 3 2 2 2 2 1
Output
2 题意:给了你n个数和一个时间,一个单位时间可以修改一次数据,修改的方法是将n个数中的某一个加1,而另一个减1(相当于把某个数的1送给另一个数),问你在规定时间内如何修改这n个数,可以使得这n个数中的最大值是所有修改方法中最小的,输出最小值。 思路:大佬的思路,不知道大佬的脑子是什么做的,这都能想出来(应该是我太菜)!!!首先要明确一点,这n个数不管如何修改,最后的最大值一定大于等于这n个数的平均值,而且一定小于等于没修改前的最大值,所以最后的答案一定在这两者之间。所以我们就可以用二分法对这两者之间的所有数进行二分查找。查找的每一次都需要判断是否符合要求:遍历所有的数,记录下这些数中比当前二分的中间值mid大的数,他们与mid的差的和是多少,如果和比你所拥有的时间多,说明不符合要求,你无法将所有的数都修改到中间值这么小,你的答案要比这个中间值大,所以二分的左边界low变成mid+1;否则右边界变成mid-1,一直到最后high
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long#define inf 0x3f3f3f3fusing namespace std;int main(){ ll n,hour,num[100005]; while(cin>>n>>hour) { ll sum = 0,aver,Max = -1; for(int i=0; i
Max) //求所有数的最大值 Max = num[i]; } if(sum%n == 0) //求平均值 aver = sum/n; else aver = sum/n +1; ll flag = 0,low = aver,high = Max,mid,all; //初始化二分的左边界为平均值,右边界为最大值 while(low <= high) //二分 { all = 0; mid = (high + low) / 2; //求二分的中间值 for(int i=0; i
mid) //求出所有比中间值大的数与中间值的差的和 all += num[i] - mid; } if(all == hour) //如果这个和刚好与拥有的时间相等,则不需要查找了,这就是答案 { flag = 1; break; } else if(all > hour) low = mid + 1; //如果和比中间值大,则答案在比中间值大的范围内 else high = mid - 1; //否则,答案在比中间值小的范围内 } if(flag) cout<
<
 

转载于:https://www.cnblogs.com/tuyang1129/p/9279426.html

你可能感兴趣的文章
[Swift]LeetCode922.按奇偶排序数组 II | Sort Array By Parity II
查看>>
微信小程序的wxml文件和wxss文件在webstrom的支持
查看>>
SaltStack快速部署及测试
查看>>
[Angular] Architectures for Huge Angular Based Enterprise
查看>>
[Git] set-upstream
查看>>
[AngularJS] Best Practise - Minification and annotation
查看>>
[AngularJS] Lazy Loading modules with ui-router and ocLazyLoad
查看>>
关于移动端rem适配
查看>>
.Net Com口通信编程例子
查看>>
js 编程笔记 【无名函数】
查看>>
Java相对路径/绝对路径总结
查看>>
SQL语句
查看>>
JS - 给数组的原型添加去掉重复元素的distinct方法
查看>>
打印插件
查看>>
vue、rollup、sass、requirejs组成的vueManager
查看>>
MySQL授权用户登录访问指定数据库
查看>>
【转】Linux下的多线程编程
查看>>
一个优秀的研发团队应该具备什么特征
查看>>
Jenkins问题汇总
查看>>
QT 项目文件介绍
查看>>