UVa 1616 Caravan Robbers (二分+贪心)
题意:给定 n 个区间,然后把它们变成等长的,并且不相交,问最大长度。
析:首先是二分最大长度,这个地方精度卡的太厉害了,都卡到1e-9了,平时一般的1e-8就行,二分后判断是不是满足不相交,找出最长的。这个题并不难,
就是精度可能控制不好,再就是把小数化成分数时,可能有点麻烦。
代码如下:
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <set>
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std;
const int INF = 0x3f3f3f3f;
const double eps = 1e-9;//注意精度
const int maxn = 1e5 + 5;
struct node{
int l, r;
bool operator < (const node &p) const{
return r < p.r;
}
};
node a[maxn];
int n; int main(){
// freopen("in.txt", "r", stdin);
while(scanf("%d", &n) == 1){
for(int i = 0; i < n; ++i)
scanf("%d %d", &a[i].l, &a[i].r); double r = 1000000, l = 0, ans = 0; sort(a, a+n);
while(r - l > eps){//二分
double m = ((l+r)/2.0);
bool ok = true;
double s = 0;
for(int i = 0; i < n; ++i){//贪心
if(s < a[i].l) s = a[i].l;
if(s + m > a[i].r){ ok = false; break; }
s += m;
}
if(ok){ ans = m; l = m; }
else r = m;
} int rp = 0, rq = 1;//小数化分数
for(int p, q = 1; q <= n; ++q){
p = round(ans * q);
if(fabs((double)p/q - ans) < fabs((double)rp/rq - ans)){
rp = p; rq = q;
}
} printf("%d/%d\n", rp, rq);
}
return 0;
}
UVa 1616 Caravan Robbers (二分+贪心)的更多相关文章
- UVA 1616 Caravan Robbers 商队抢劫者(二分)
x越大越难满足条件,二分,每次贪心的选区间判断是否合法.此题精度要求很高需要用long double,结果要输出分数,那么就枚举一下分母,然后求出分子,在判断一下和原来的数的误差. #include& ...
- UVa - 1616 - Caravan Robbers
二分找到最大长度,最后输出的时候转化成分数,比较有技巧性. AC代码: #include <iostream> #include <cstdio> #include <c ...
- UVa 1335 Beijing Guards (二分+贪心)
题意:n 个人成一个圈,每个人想要 ri 种不同的礼物,要求相邻两个人没有相同的,求最少需要多少礼物. 析:如果 n 是偶数,那么答案一定是相邻两个人的礼物总种数之和的最大值,那么如果是奇数,就没那么 ...
- UVA 1149 Bin Packing 二分+贪心
A set of n 1-dimensional items have to be packed in identical bins. All bins have exactly the samele ...
- Codeforces Gym 100231B Intervals 线段树+二分+贪心
Intervals 题目连接: http://codeforces.com/gym/100231/attachments Description 给你n个区间,告诉你每个区间内都有ci个数 然后你需要 ...
- 2016-2017 ACM-ICPC CHINA-Final Ice Cream Tower 二分+贪心
/** 题目:2016-2017 ACM-ICPC CHINA-Final Ice Cream Tower 链接:http://codeforces.com/gym/101194 题意:给n个木块,堆 ...
- 【bzoj2097】[Usaco2010 Dec]Exercise 奶牛健美操 二分+贪心
题目描述 Farmer John为了保持奶牛们的健康,让可怜的奶牛们不停在牧场之间 的小路上奔跑.这些奶牛的路径集合可以被表示成一个点集和一些连接 两个顶点的双向路,使得每对点之间恰好有一条简单路径. ...
- Codeforces_732D_(二分贪心)
D. Exams time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...
- CF732D Exams 二分 贪心
思路:二分+贪心 提交次数:10次以上 错因:刚开始以为二分(边界,$+1or-1$)写错了,调了半天,后来才发现是$ck()$写错了.开始只判了最后是否小于零,而应该中间一旦小于零就$return\ ...
随机推荐
- 基于Tomcat 的WEB Project存在的安全漏洞总结
1 检查工具:Acunetix Web Vulnerability Scanner V9破解版 2 检查漏洞说明结果显示: 2.1 HTML Form Without CSRF Protection ...
- 在vc++上简单搭建环境(包括文件引用)
1,triplet_head.h 文件 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVER_FLOW -2 ...
- 设置JAVA HOME环境变量的秕处理
echo "放在JDK目录下,win xp需要下载SETX.EXE" setx /m Java_Home "%cd%" setx /m ClassPath &q ...
- win7 安装 node-sass报错
由于国内网络问题,所以会导致下载node-sass二进制包失败 只需要在 ~/.npmrc(当前用户家目录下)添加下面一行: sass_binary_site=https://npm.taobao.o ...
- 文件读取错误UnicodeDecodeError: 'utf-8' codec can't decode byte 0x92 in position 884: invalid start byte
参考: https://segmentfault.com/q/1010000004268196/a-1020000004269556 ubuntu下Python3使用open('filename', ...
- [Android] 开发第十天
这几天因为电脑的 USB口发生故障,一直没怎么玩 Android-Studio 后来把电脑从 Win7 -> Win10 重装后,一部分 USB口 可以使用了,然后接着开发 Android 接 ...
- [转]Acrylic DNS Proxy 使用方法
本文转自:http://www.cnwyw.net/index.php/acrylic-dns-proxy-ping-bi-guang-gao/ 从开始菜单进行“Edit Configuration ...
- VS2017如何配置openGL环境
转自:http://blog.csdn.net/qq_26982531/article/details/62056913 这里着重介绍vs2017配置openGL环境与以前版本的不同之处: ...
- c#中的可选参数和命名参数的使用
C#4.0之后出现了一个可选参数这个特性. class Cal { static void Main(string[] args) { test1 t = new test1(); t.Add(, ) ...
- 常见的linux服务器构建
Linux常用服务器构建-ftp服务器 ftp服务器 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”. 用于Internet上的控制文件的双 ...