博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ2456(最大化最小值)解题报告
阅读量:7068 次
发布时间:2019-06-28

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

原题链接:

题意简述:求在1~N中选C个位置,每俩个位置之间距离最小的值最大化。

思路:让距离最小的那个距离最大。可以看出来答案具有单调性,那我们就可以转求解为判定,用二分搜索来求结果。具体做法就是假定一个答案,再不断缩小答案范围,最终得到解。

注意点:while循环内的判定条件需要仔细考虑,稍有改变就会有截然不同的结论。

代码示例:

#include
#include
using namespace std;const int maxn = 1e5+10;int stall[maxn];int n,c;bool C(int size){ int cnt = 1; int last = 0; for(int i = 1;i < n;i++){ if(stall[i] - stall[last] >= size) cnt++,last = i; } return cnt >= c;}int main(){ scanf("%d%d",&n,&c); for(int i = 0;i < n;i++) scanf("%d",stall+i); sort(stall,stall+n); long long l = 0,r = 3e9; while(l < r){ int mid = (l + r)/2; if(C(mid)) l = mid+1; else r = mid; } printf("%lld\n",l-1); return 0;}

至于为什么最后答案是l-1呢?假设到了最后一个成立的答案mid,此时l = mid + 1 ,那么下一个必定不成立并l = r退出,此时答案其实为l - 1,即上述的mid。

转载于:https://www.cnblogs.com/long98/p/10352156.html

你可能感兴趣的文章
编译原理:正规式转变成DFA算法
查看>>
MongoDB数据库的MapReduce简单操作(转)
查看>>
cisco图标
查看>>
java获取类的信息
查看>>
Hibernate5-进阶添加工具类,对获取Session的方法封装
查看>>
通过内存映射文件来颠倒文本内容(暂没有处理Unicode和换行符)
查看>>
Debian软件包信息查询
查看>>
天猫物流提速背后:大数据加速颠覆传统零售业
查看>>
网页优化十大策略
查看>>
为每一个table单元格设置不同的背景颜色
查看>>
盘点智能硬件中那些脑洞大开的黑科技
查看>>
[HDFS Manual] CH4 HDFS High Availability Using the Quorum Journal Manager
查看>>
maven pom.xml详解
查看>>
活动目录数据库文件介绍
查看>>
Linux下配置tomcat+apr+native应对高并发
查看>>
html5播放mp4视频代码
查看>>
孟子>正文 活动目录(Active Directory)域故障解决实例(转载)
查看>>
NoSuchMethodError: org.hibernate.SessionFactory.openSession
查看>>
textarea自动调整高宽
查看>>
python基础---面向对象高级
查看>>