博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tyvj1938 最优战舰
阅读量:5092 次
发布时间:2019-06-13

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

描述

太空战队顺利地完成了它的第一次使命,这一行动的受益者陆军本部当即决定,请陆军的战士们投票选出最优战舰并报司令总部进行表彰。
为防止有人利用高科技手段造假,陆军本部决定使用最原始的方法进行投票。可不幸的是,陆军的战士正在N个不同的地点执行任务,第i个地点有a[i]名战士参加投票。按照规定,票箱的数量是有限的M(M>=N)个,每个票箱的容量必须完全相同。显然,分配给每个选区的票箱总容量不能比选区的战士数目少。不幸中的万幸,票箱的容量C是可以任意规定的。
陆军本部需要你的帮助来合理地把这M个票箱分给N个不同的选区。为节约成本,你需要在满足每个“选区”投票需求的同时使得每个票箱的容量能够尽量地小。

输入格式

第一行两个整数N、M,表示选区的个数和票箱的个数。
接下来N行每行1个整数,第i+1行的整数a[i]表示第i个选区参与投票的士兵数。

输出格式

一行一个整数C,表示在能够满足选举需求的情况下的最小票箱容量。

测试样例1

输入

2 7 
200000 
500000

输出

100000

备注

分配给第1个选区2个票箱,第2个选区5个票箱即可。
对于30%的数据,N<=1000, M<=1000, a[i]<=1000.
对于100%的数据,0<N<=100000, 0<M<=1000000, 0<=a[i]<=10000000.
#include
#include
#include
#include
#include
#include
using namespace std;const int maxn = 1000005;int n,m,a[maxn];bool check(int t){ int ans = 0,tmp; for(int i = 1;i <= n;i++){ tmp = a[i] / t; if(tmp * t < a[i]) tmp++; ans += tmp; if(ans > m) return false; } return true;}int main(){ cin>>n>>m; int l = 0,r = 0,mid,ans; for(int i = 1;i <= n;i++){ scanf("%d",&a[i]); if(a[i] > r) r = a[i]; } while(l <= r){ mid = (l + r) >> 1; if(check(mid)){ ans = mid; r = mid - 1; }else{ l = mid + 1; } } cout<

 

转载于:https://www.cnblogs.com/hyfer/p/5791429.html

你可能感兴趣的文章
排球积分程序(三)——模型类的设计
查看>>
HDU 4635 Strongly connected
查看>>
格式化输出数字和时间
查看>>
页面中公用的全选按钮,单选按钮组件的编写
查看>>
java笔记--用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程
查看>>
(旧笔记搬家)struts.xml中单独页面跳转的配置
查看>>
不定期周末福利:数据结构与算法学习书单
查看>>
strlen函数
查看>>
关于TFS2010使用常见问题
查看>>
软件工程团队作业3
查看>>
火狐、谷歌、IE关于document.body.scrollTop和document.documentElement.scrollTop 以及值为0的问题...
查看>>
nodejs fs路径
查看>>
javascript之数组操作
查看>>
Python编译错误总结
查看>>
URL编码与解码
查看>>
Eclipse 安装SVN插件
查看>>
阿里云服务器CentOS6.9安装Mysql
查看>>
剑指offer系列6:数值的整数次方
查看>>
js 过滤敏感词
查看>>
poj2752 Seek the Name, Seek the Fame
查看>>