Caravan Robbers UVA
来源:互联网 发布:北京软件技术学院 编辑:程序博客网 时间:2024/05/17 05:53
题目传送门
题意:输入n条线段,把每一条线段的变成原线段的一条子线段,使得改变之后的线段等长且不相交(端点可以重合)。输入最大的长度。
思路:思路很简单,先排序然后二分就可以了,这个题难的是在于如何将一个小数转换为分数,一开始自己写的可能精度有些问题后来看了一下别人的思想差不多。
#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>#include <fstream>#include <iostream>#include <list>#include <map>#include <queue>#include <set>#include <sstream>#include <stack>#include <string>#include <vector>#define MAXN 100010#define MAXE 10010#define INF 100000000#define MOD 1000000007#define LL long long#define pi acos(-1.0)using namespace std;struct Node{ double left; double right;}p[MAXN];int n;bool cmp(const Node &p1, const Node &p2) { if (p1.left == p2.left) return p1.right < p2.right; return p1.left < p2.left;}bool judge(double mid) { double pos = p[0].left + mid; if (pos > p[0].right) return false; for (int i = 1; i < n; ++i) { pos = max(pos, p[i].left) + mid; if (pos > p[i].right) return false; } return true;}int main() { std::ios::sync_with_stdio(false); while (cin >> n) { double left = 0, right = 0; for (int i = 0; i < n; ++i) { cin >> p[i].left >> p[i].right; if (p[i].right - p[i].left > right) right = p[i].right - p[i].left; } sort(p, p + n, cmp); double mid = 0; for (int i = 0; i < 100; ++i) { mid = (left + right) / 2; if (judge(mid)) left = mid; else right = mid; } int rp = 0, rq = 1; for (int p, q = 1; q <= n; q++) { p = round(mid * q); if (fabs((double) p / q - mid) < fabs((double) rp / rq - mid)) { rp = p; rq = q; } } cout << rp << "/" << rq << endl; } return 0;}/*32 61 48 12 */
阅读全文
0 0
- UVa 1616 Caravan Robbers
- UVa - 1616 - Caravan Robbers
- UVA 1616 - Caravan Robbers
- UVA 1616 Caravan Robbers
- Caravan Robbers UVA
- UVA 1616 Caravan Robbers(二分+贪心)
- UVa 1616 Caravan Robbers (二分)
- UVA - 1616 Caravan Robbers 二分+暴力转换
- UVA 1616 Caravan Robbers 【二分+贪心+枚举分母】
- UVA 1616 Caravan Robbers(二分 + 小数变分数)
- NEERC2012 Caravan Robbers
- (解题报告) Uva 1616 Caravan Robbers (商队抢劫者)(上凸包+队列+结构体)
- UVA 361 Cops and Robbers
- UVa 361 - Cops and Robbers
- 习题8-14 商队抢劫者(Caravan Robbers ACMICPC NEERC 2012 UVa1616)
- Robbers
- UVA 361 Cops and Robbers(凸包应用)
- UVA 361 || Cops and Robbers (点是否在凸包内
- 通过射线检测 获取到某个点的颜色值
- 要写的博客
- Jquery中.attr()和.data()的区别
- 多线程编程(二)
- matlab路径(string)操作及基本data读取保存
- Caravan Robbers UVA
- 新手之路--spark
- matplotlib 时间轴绘图
- HDU
- PAT 1074. Reversing Linked List (25)
- HIVE学习笔记:初识HIVE
- 用*打印三角形和菱形
- The Google File System : part6 MEASUREMENTS
- [USACO NOV]金发姑娘和N头牛解题报告