poj 3258 BinarySearch 最大化最小值
来源:互联网 发布:java 异常处理机制5种 编辑:程序博客网 时间:2024/05/19 23:24
题目链接:http://poj.org/problem?id=3258
思路:二分法查找的应用(最大化最小值)
从0~INF进行二分法查找,每次折半,将其值带入检验是否合理,根据结果不断更新查找范围,这是二分法题目大致步骤。
就此题来说,有几点需要注意:
1.起点的值是0,即rock[0]=0; //在此处wa了好多次~~
2.关于统计需要删除的点的个数,我纠结了好久,不确定那种方法删除点的个数是最少的,后来发现只要一直删右边的点即可(终点除外)(关于这点我还是有点纳闷)。
详细看代码
code:
#include <cmath>#include <cstdio>#include <cstring>#include <cstdlib>#include <algorithm>#include <iostream>#include <map>#include <set>#include <list>#include <queue>#include <stack>#include <vector>#include <assert.h>using namespace std;#define SIZE 50005#define INF 1000000005int L,N,M;int rock[SIZE];bool C(int d){ int mark=0; int j=0; //因为左边的点都是满足题意的 所以一直删右边的即可 for(int i=1;i<=N;i++){ if(rock[i]-rock[j]<d) mark++; else j=i; } if (mark>M) return false; return true;}int main(){ scanf("%d%d%d",&L,&N,&M); for(int i=1;i<=N;i++) scanf("%d",&rock[i]); N++; rock[0]=0; rock[N]=L; sort(rock,rock+(N+1)); //初始化范围 int lb=0,ub=INF; while(ub-lb>1){ int mid=(ub+lb)/2; //如果是最小化的话则lb和ub的位置互换 if (C(mid)) lb=mid; else ub=mid; } printf("%d\n",lb);}
0 0
- poj 3258 BinarySearch 最大化最小值
- poj 3258 最大化最小值
- POJ 3258 River Hopscotch (二分,最大化最小值)
- POJ 3258 River Hopscotch(最大化最小值)
- poj--3258 River Hopscotch(最大化最小值)
- POJ 3258 River Hopscotch【二分:最大化最小值】
- POJ 3258(二分——最大化最小值)
- POJ 3258(二分——最大化最小值)
- poj 2456 最小值最大化
- poj 2456 最大化最小值
- poj 2456 最大化最小值
- poj 2456【最大化最小值】
- 【最大化最小值】POJ
- poj 2456 二分法 最大化最小值
- poj 3258 River Hopscotch (二分搜索---最大化最小值)
- POJ - 3258 River Hopscotch(二分搜索:最大化最小值)
- [ACM] POJ 3258 River Hopscotch (二分,最大化最小值)
- [ACM] POJ 3258 River Hopscotch (二分,最大化最小值)
- 第四周作业
- android源码查看 android-support-v4.jar
- 关于javascript中alert单线程问题以及网页乱码问题之一
- C++全局变量构造函数的调用
- HDOJ 4763 Theme Section
- poj 3258 BinarySearch 最大化最小值
- 计科《算法设计与分析》第三周作业——冒泡排序和归并排序
- 同步Vmware中系统与主机的时间
- Eclipse反编译插件的安装
- 库函数qsort的实现
- jaxp dom 的 update/delete /save
- NET Framework 3.5 sp1离线安装方案
- 记12306货运系统“抢订空车”插件的编写--订车流程梳理
- Android EditText小实验