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自启动脚本
1.#cd /etc/rc.d/init.d2.#vi tomcat3.把下面的代码保存为tomcat文件,并让它成为可执行文件 chmod 755 tomcat. #!/bin/sh # # /et ...
- (5)函数式接口的简单使用之Predicate
我们经常操作List,例如现在有一个功能要求在所有人中筛选出年龄在20岁以上的人. public class MyTest { private final List<Person> ...
- (转)如何实现CSS限制字数,超出部份显示点点点...
<div style="width:200px; white-space:nowrap;overflow:hidden;text-overflow:ellipsis; border:1 ...
- Java 遍历文件夹里面的全部文件、指定文件
Java 手册 listFiles public File[] listFiles(FileFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件 ...
- C++ 排序总结
原帖地址 http://kongec.blog.sohu.com/85141353.html 附 六分钟演示15中算法 http://www.guokr.com/post/482666/ 一.插入排 ...
- Python开发一个简单的BBS论坛
项目:开发一个简单的BBS论坛 需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可 ...
- django-聚合操作
聚合操作就是对数据库的数值类型操作的方法 avg,sum,max,min,count select avg(age) from students # 求年龄平均值 django中的聚合操作 1.a ...
- 部分流媒体协议及流媒体开发框架vitamio
流媒体协议部分RTP.RTCP.RTSP.MMS.HLS.HTTP progressive streaming 流媒体协议:(RTP.RTCP.RTSP.MMS.HLS.HTTP progress ...
- 我的第一个C程序
// // main.c // one // // Created by Shuang Gai on 2019/1/19. // Copyright © 2019 Shuang Gai. All ri ...
- Rhythmk 一步一步学 JAVA (20) JAVA enum常用方法
JAVA 枚举定义常用方法: 1.static Enum valueOf(Class enum,String name) 返回指定name的枚举类型 2.Static Enum values[] 返回 ...