题意:题目给出N个城市和B个邮箱,接下里输入N个城市的人口数量,对于每一个城市,需要给出至少一个邮箱方便选民寄信,我们所要做的就是,将邮箱按照一定要求分配给各个城市,使得装有最多信封的邮箱中的信封同比其他方案下最多信封的邮箱中的信封数是最少的(有那么点绕,简而言之就是相当于使得最大值最小)。

思路还是很明确的,跟Pie的那道题(我的解题链接(详解))差不多,在这里,我还是会给出详解:

我们已知的就是N,B,与ai,我想到的方法就是把他们之间相互的关系连接在一起,譬如我们假设一个答案x,那么我们可以把ai从0~N-1逐步求与x整除的和sum(如果不能整除,则和再+1),如果sum>B,则说明我们给出的x偏小,反之则可能偏大或者取等时有可能为正确答案。——于是,就有了二分的思想。

主要函数:

        while(left<=right){int sum=0;mid=(left+right)/2;for(int i=0; i<N; i++){sum+=a[i]/mid;if(a[i]%mid){++sum;}}if(sum>B){left=mid+1;}else{right=mid-1;}}

在此处,用“sum>B”作为判断语句是有讲究的,我们此处不能用“sum>=B”,因为我们要输出的是最后得到的left,故假如我们在“sum==B”的时候还在继续判断,有可能使得达到的答案超出范围,我们要的是让left逐渐逼近正确答案值,当“left>right”时跳出循环那么那时候得到的答案肯定就是我们所要求的答案了(因为left-1那时候还可以继续判断,而再加下来就是答案left,刚好是所要求的答案)。

AC代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int a[500001];
int N,B;
int main()
{while(scanf("%d%d",&N,&B)){if(N==-1 && B==-1)break;memset(a, 0, sizeof(a));int maxx=0;for(int i=0; i<N; i++){scanf("%d",&a[i]);if(maxx<a[i]) maxx=a[i];}int left=0,right=maxx;int mid=0;while(left<=right){int sum=0;mid=(left+right)/2;for(int i=0; i<N; i++){sum+=a[i]/mid;if(a[i]%mid){++sum;}}if(sum>B){left=mid+1;}else{right=mid-1;}}printf("%d\n",left);}return 0;
}

Distributing Ballot Boxes HDU - 4190【详细翻译】【贪心、二分】相关推荐

  1. Distributing Ballot Boxes HDU - 4190

    问题·: Today, besides SWERC'11, another important event is taking place in Spain which rivals it in im ...

  2. HDU 4190 Distributing Ballot Boxes【二分答案】

    题意:给出n个城市,n个城市分别的居民,m个盒子,为了让每个人都投上票,问每个盒子应该装多少张票 二分盒子装的票数, 如果mid<=m,说明偏大了,r应该向下逼近 ,r=mid 如果mid> ...

  3. mysql配置文件简易代码_MySQL配置文件my.cnf 例子最详细翻译

    转的 MySQL配置文件my.cnf 例子最详细翻译,可以保存做笔记用. #BEGIN CONFIG INFO #DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负 ...

  4. mysql 初始化my.cnf_MySQL配置文件my.cnf 例子最详细翻译

    转的 MySQL配置文件my.cnf 例子最详细翻译,可以保存做笔记用. #BEGIN CONFIG INFO #DESCR: 4GB RAM,只使用InnoDB,ACID,少量的连接,队列负载大 # ...

  5. [SCOI2005]栅栏(贪心+二分+dfs)难度⭐⭐⭐⭐

    [SCOI2005]栅栏(贪心+二分+dfs) P2329 [SCOI2005]栅栏 题目描述 农夫约翰打算建立一个栅栏将他的牧场给围起来,因此他需要一些特定规格的木材.于是农夫约翰到木材店购买木材. ...

  6. LIS最长上升子序列详解(动态规划、贪心+二分、树状数组)

    1.摘要: 关于LIS部分,本篇博客讲一下LIS的概念定义和理解,以及求LIS的三种方法,分别是O(n^2)的DP,O(nlogn)的二分+贪心法,以及O(nlogn)的树状数组优化的DP,最后附上几 ...

  7. 贪心/二分查找 BestCoder Round #43 1002 pog loves szh II

    题目传送门 1 /* 2 贪心/二分查找:首先对ai%=p,然后sort,这样的话就有序能使用二分查找.贪心的思想是每次找到一个aj使得和为p-1(如果有的话) 3 当然有可能两个数和超过p,那么an ...

  8. HDU 4714 Tree2cycle:贪心

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4714 题意: 给你一棵树,添加和删除一条边的代价都是1.问你将这棵树变成一个环的最小代价. 题解: 贪 ...

  9. 【论文】模型剪枝(Network Pruning)论文详细翻译

    前言: 这是关于模型剪枝(Network Pruning)的一篇论文,论文题目是:Learning both weights and connections for efficient neural ...

  10. 【论文】轻量级网络squeezenet论文的详细翻译

    前言: 整体上翻译了squeezenet:AlexNet-level accuracy with 50X fewer paramenters and 0.5MB model size.这篇论文,便于英 ...

最新文章

  1. VC++中从txt文本中读取数据并且存到二维数组中
  2. 0xc000007b错误 - 解决方法备忘(vc red重装)
  3. php调用for循环函数吗,我需要将“函数”与“for循环”结合使用php
  4. HTML CSS JS之间的关系
  5. centos7添加运行终端快键键
  6. 互信息的数学解释以及matlab编程
  7. Scala 数据类型列表
  8. 服务器磁盘操作系统双机软件集成,实战:ROSE HA双机热备系统安装指南
  9. 解决保存快照失败后redis无法写入的问题( Redis is configured to save RDB snapshots)
  10. 如何用Pygame写游戏(九)
  11. AI项目商务合作,寻广州附近计算机视觉算法团队!
  12. Amazon S3数据一致性模型
  13. 《OpenGL编程指南(原书第8版)》——计算着色器
  14. 铅笔道区块链实验班_你们抢着要的道地药材,必须用上区块链了
  15. 【python】pyhton中的and
  16. wps下一步快捷键_WPS快捷键大全
  17. 球的体积并(计算几何+球缺)
  18. Trunk技术需求与应用
  19. clicktorun 离线_Project 2016 和 Visio 2016 的 Office Click-to-Run 永久(C2R P)版本
  20. QTransform(图形平移旋转剪切变换)

热门文章

  1. Linux resolv.conf 简介
  2. PS如何快速抠头发丝
  3. HDU - 4826(dp)
  4. Python 并发编程
  5. 充电识别过程及QC2.0
  6. PermissionError: [Errno 13] Permission denied: ‘label.csv‘
  7. 跨平台应用开发进阶(三十四) :uni-app 应用 Universal Link 实现 iOS 微信分享
  8. JavaScript工具函数
  9. 51驱动AD9850/AD9851—DDS信号发生器
  10. 【特征提取】|TSE