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

谷歌翻译:

距离特工Mahone离开安曼还有K小时!哈姆穆里不喜欢任务中的事情,他不想再次失败。有些地方的学生太多,而其他地方只有很少的学生。

每当Hammouri命令学生改变他的位置时,学生只需要一个小时就能到达新的地方。 Hammouri等到他确定学生在发出新命令之前已到达新地方。因此,每小时只有一名学生可以改变他的位置。

Hammouri希望命令学生改变他们的位置,以便在K小时后,覆盖同一地方的学生的最大数量被最小化。

考虑到覆盖每个地方的学生人数,您的任务是找到K小时后覆盖同一地点的最大学生人数,假设Hammouri正确地最小化了这个数字。

输入
第一行输入包含两个整数M(2≤M≤105)和K(1≤K≤109),其中M是位数,K是代理Mahone离开安曼之前剩余的小时数。

第二行包含M个非负整数,每个整数代表覆盖其中一个地方的学生人数。每个地方最多有109名学生。

产量
假设Hammouri在最近K小时内尽可能地减少了这个数字,打印在K小时后覆盖一个地方的学生的最大数量。

应该看得懂吧。

我们要算在小于等于k次操作后所有地方学生的最大值。

个人思路:我们把所有的值的和sum算出,可以知道,如果sum%M==0,那么学生数ave最小为sum/M,否则最小为sum/M+1;

然后用二分,最小为l=ave,最大就是r=max(M1,...Mi),不断二分查找符合条件的值,同时不断更新就可以了。

时间复杂度为nlogn吧

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define inf 1000000009
ll a[];
ll n,m,ans,ave;
int jug(ll k)//判断是否可行
{
ll count=;
for(int i=;i<n;i++)
{
if(a[i]>k)
count+=a[i]-k;
}
if(count>m)
return ;
return ;
}
void binary(ll l,ll r)
{
ll mid=(l+r)/;
while(l<=r)
{
if(jug(mid))
{
ans=min(ans,mid);
r=mid-;
}
else
l=mid+;
mid=(l+r)/;
}
}
int main()
{
while(cin>>n>>m)
{
ll sum=;
ans=inf;
ll max=;
for(int i=;i<n;i++)
{
cin>>a[i];
sum+=a[i];
if(a[i]>max)
max=a[i];
}
if(sum%n==)//找最小值
ave=sum/n;
else
ave=sum/n+;
binary(ave,max);
cout<<ans<<endl;
}
return ;
}

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

  1. E.Text Editor (Gym 101466E + 二分 + kmp)

    题目链接:http://codeforces.com/gym/101466/problem/E 题目: 题意: 给你s串和t串,一个数k,求t的最长前缀串在s串中出现次数不少于k. 思路: 一眼二分+ ...

  2. Gym - 100989G (二分法)

    There are K hours left before Agent Mahone leaves Amman! Hammouri doesn't like how things are going ...

  3. Gym - 101908G 二分答案+最大流

    After the end of the truck drivers' strike, you and the rest of Nlogônia logistics specialists now h ...

  4. Hacker Cups and Balls Gym - 101234A 二分+线段树

    题目:题目链接 题意:有编号从1到n的n个球和n个杯子. 每一个杯子里有一个球, 进行m次排序操作,每次操作给出l,r. 如果l<r,将[l,r]范围内的球按升序排序, 否则降序排, 问中间位置 ...

  5. Gym 102007I 二分 网络流

    题意:给你一张图,每个城市有一些人,有不超过10个城市有避难所,避难所有容量上限,问最快多久可以让所有人进入避难所? 思路:二分时间,对于每个时间跑一遍最大流,判断最大流是不是人数即可.我们还需要用二 ...

  6. G - 土耳其冰淇凌 Gym - 101194D(二分答案 + 贪心检验)

    熊猫先生非常喜欢冰淇淋,尤其是冰淇淋塔.一个冰淇淋塔由K个冰淇淋球堆叠成一个塔.为了使塔稳定,下面的冰淇淋球至少要有它上面的两倍大.换句话说,如果冰淇淋球从上到下的尺寸是A0, A1, A2,···, ...

  7. 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 ...

  8. Gym 101064 D Black Hills golden jewels (二分)

    题目链接:http://codeforces.com/gym/101064/problem/D 问你两个数组合相加的第k大数是多少. 先sort数组,二分答案,然后判断其正确性(判断过程是枚举每个数然 ...

  9. Codeforces Gym 100803G Flipping Parentheses 线段树+二分

    Flipping Parentheses 题目连接: http://codeforces.com/gym/100803/attachments Description A string consist ...

随机推荐

  1. 转载:VS项目属性配置总结

    本文来自:http://www.mamicode.com/info-detail-232474.html       https://www.cnblogs.com/alinh/p/8066820.h ...

  2. defaultdict

    原作者: Jason Kirtland 日期: January 13th, 2009 许可证: Creative Commons Attribution-Share Alike 3.0 原文链接(PP ...

  3. twisted的installReactor()函数

    #twisted的安装反应堆函数def installReactor(reactor): """ Install reactor C{reactor}. @param r ...

  4. ssm学习的第一个demo---crm(2)

    第四步:                  别名不区分大小写:入参为基本类型,#{可以随便写} 把静态资源(jsp.css.js.fonts)导入到项目中 第五步: 创建Contrller类(和普通j ...

  5. leetcode44

    public boolean isMatch(String text, String pattern) { // 多一维的空间,因为求 dp[len - 1][j] 的时候需要知道 dp[len][j ...

  6. Netty socket.io 启用Epoll 模式异常

    Epoll 环境为Linux 内核2.6 以上版本  Windows下不能启动 1:判断Linux环境 public static boolean isOSLinux() { Properties p ...

  7. list集合转换成datatable

    /// 将list集合转换成datatable /// </summary> /// <param name="list"></param> / ...

  8. Delphi访问网页中的下拉菜单

    Delphi通过TWebBrowser浏览网页,然后访问该网页中的下拉菜单: uses MsHtml;procedure TForm1.Button1Click(Sender: TObject);va ...

  9. Error building Player: Exception: Could not start java

    4.6.1发布Flash版本出错.解决方法:把C:\Windows\System32\java.exe复制到C:\Windows\SysWOW64下即可

  10. 一个docker镜像中的目录删除不了问题

    在一个容器中,删除一个目录,失败: bash-4.2# pwd /home/zxcdn/ottcache/tomcat bash-4.2# uname -a Linux 3516b6c97679 -. ...