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<low结束查找。具体看代码:
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<string>
#include<algorithm>
#include<stack>
#include<queue>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
int main()
{
ll n,hour,num[];
while(cin>>n>>hour)
{
ll sum = ,aver,Max = -;
for(int i=; i<n; ++i)
{
scanf("%lld",&num[i]);
sum += num[i]; //求出所有数的和
if(num[i] > Max) //求所有数的最大值
Max = num[i];
}
if(sum%n == ) //求平均值
aver = sum/n;
else aver = sum/n +; ll flag = ,low = aver,high = Max,mid,all; //初始化二分的左边界为平均值,右边界为最大值
while(low <= high) //二分
{
all = ;
mid = (high + low) / ; //求二分的中间值
for(int i=; i<n; ++i)
{
if(num[i] > mid) //求出所有比中间值大的数与中间值的差的和
all += num[i] - mid;
}
if(all == hour) //如果这个和刚好与拥有的时间相等,则不需要查找了,这就是答案
{
flag = ;
break;
}
else if(all > hour) low = mid + ; //如果和比中间值大,则答案在比中间值大的范围内
else high = mid - ; //否则,答案在比中间值小的范围内
}
if(flag)
cout<<mid<<endl;
else
cout<<low<<endl;
}
return ;
}

Gym - 100989G (二分法)的更多相关文章

  1. Gym - 100989G 二分

    链接:ECJTU 2018 Summer Training 1 - Virtual Judge  https://vjudge.net/contest/236677#problem/G 谷歌翻译: 距 ...

  2. Gym 101246H ``North-East''(LIS)

    http://codeforces.com/gym/101246/problem/H 题意: 给出n个点的坐标,现在有一个乐队,他可以从任一点出发,但是只能往右上方走(包括右方和上方),要经过尽量多的 ...

  3. Gym - 100283F F. Bakkar In The Army —— 二分

    题目链接:http://codeforces.com/gym/100283/problem/F F. Bakkar In The Army time limit per test 2 seconds ...

  4. ACM: Gym 101047M Removing coins in Kem Kadrãn - 暴力

     Gym 101047M Removing coins in Kem Kadrãn Time Limit:2000MS     Memory Limit:65536KB     64bit IO Fo ...

  5. ACM: Gym 101047K Training with Phuket's larvae - 思维题

     Gym 101047K Training with Phuket's larvae Time Limit:2000MS     Memory Limit:65536KB     64bit IO F ...

  6. ACM: Gym 101047E Escape from Ayutthaya - BFS

    Gym 101047E Escape from Ayutthaya Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I6 ...

  7. ACM: Gym 101047B Renzo and the palindromic decoration - 手速题

     Gym 101047B  Renzo and the palindromic decoration Time Limit:2000MS     Memory Limit:65536KB     64 ...

  8. C语言两种查找方式(分块查找,二分法)

    二分法(必须要保证数据是有序排列的):   分块查找(数据有如下特点:块间有序,块内无序):    

  9. poj3122-Pie(二分法+贪心思想)

    一,题意: 有f+1个人(包括自己),n块披萨pie,给你每块pie的半径,要你公平的把尽可能多的pie分给每一个人 而且每个人得到的pie来自一个pie,不能拼凑,多余的边角丢掉.二,思路: 1,输 ...

随机推荐

  1. Java 排序(快排,归并)

    Java 排序有Java.util.Arrays的sort方法,具体查看JDK API(一般都是用快排实现的,有的是用归并) package yxy; import java.util.Arrays; ...

  2. linux日志查询技巧

    问题描述: 18803959896用户反馈,通讯录备份失败,提示“身份验证失败,请注销账号后重新登录”,不管用账号密码登录还是一键登录,都是提示这个.请协助查询.谢谢~ 备注:三星note3最新版本彩 ...

  3. App压力测试背景

    开展压力测试 原因: 提高产品的稳定性 提高产品的留存率 时间: 首轮功能测试通过 夜间进行(将工具设置后进行,节约资源) 如何开展: 确定事件流 模拟事件流

  4. django之管理静态文件

    管理静态文件 项目中的CSS.图片.js都是静态文件 配置静态文件 在settings 文件中定义静态内容 STATIC_URL = '/static/' STATICFILES_DIRS = [ o ...

  5. IAR安装破解教程

    主要讲解IAR软件安装及破解使用 1.下载安装包.注册机 2.点击安装程序 ~ 点击第二个选项进行安装 ~ 然后一直next,再选择安装路径 继续next开始安装,等个五分钟左右即可安装完成 2.破解 ...

  6. WampServer之php、mysql环境安装

    WampServer之php.mysql环境安装 WampServer介绍: WampServer是一款由法国人开发的Apache Web服务器.PHP解释器以及MySQL数据库的整合软件包.免去了开 ...

  7. Image与Bitmap的区别及相互转换

    1. Image.FromFile()返回的是某个继承自Image的具体类的对象,在这里,就是Bitmap或者Metafile其中之一.这应该算是factory pattern的一种形式.所以,Ima ...

  8. leetcode746

    class Solution { public: int minCostClimbingStairs(vector<int>& cost) { vector<); totol ...

  9. WOW研究资料收集

    1,模拟服务器:trinity core, sunwell core等 参考:逍遥魔兽 2,大芒果:通用网游框架,带了WOW的模拟模块 参考资料: 大芒果论坛http://www.mangoscn.c ...

  10. 出现The folder is already a source folder

    右键build path -> configure build path -> source ,选择 src/main/java.src/test/java删除,然后再新建.