参考了https://www.cnblogs.com/dwtfukgv/p/5645446.html

(1)直接二分答案。说实话我没有想到, 一开始以为是贪心, 以某种策略能得到最优解。

但是想了很久没想出来, 后来看了博客发现因为显然答案是单调的, 可以用二分来做。

看到最大, 最小, 可以考虑答案是否单调, 单调考虑用二分

(2)然后是小数化分数, 其实一开始我想模拟分数, 然后发现很麻烦, 之后博客里的方法技巧性很强。

其实这个方法默认了分母是在1到n之间的, 而好像题目并没有给出这个条件。这个其实就是枚举所有

与ans接近的分数, 选最近的。

(3)这道题目的精度太恐怖了, 第一是1e-9, 第二是我为了保险最后ans取得是最后的(l+r)/2。

但是wa,  改成ans=l就过了……

#include<cstdio>
#include<cmath>
#include<queue>
#include<algorithm>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std;const int MAXN = 112345;
const double EPS = 1e-9;
struct node
{int l, r;bool operator < (const node& x) const{return l < x.l;}
}a[MAXN];
int n;bool judge(double key)
{double start = 0;REP(i, 0, n){if(start < a[i].l) start = a[i].l;if(start + key > a[i].r) return false;start += key;}return true;
}int main()
{while(~scanf("%d", &n)){REP(i, 0, n) scanf("%d%d", &a[i].l, &a[i].r);sort(a, a + n);double l = 0, r = 1e6;while(r - l > EPS){double m = (l + r) / 2.0;if(judge(m)) l = m;else r = m;}double ans = l;int ansp = 0, ansq = 1;REP(q, 1, n + 1){int p = round(ans * q);if(fabs((double)p / q - ans) < fabs((double)ansp / ansq - ans))ansp = p, ansq = q;}printf("%d/%d\n", ansp, ansq);}return 0;
}

转载于:https://www.cnblogs.com/sugewud/p/9819565.html

紫书 习题8-14 UVa 1616(二分+小数化分数+精度)相关推荐

  1. 紫书 习题 10-17 UVa 11105 (筛法)

    类似于素数筛的思想去做,不然暴力会超时而且还要判重 #include<cstdio> #include<cstring> #include<vector> #def ...

  2. 紫书 习题 10-44 UVa 11246 ( 容斥原理)

    把k的倍数的删去(k, 2k, 3k--),但是k^2不应该删去,因为k已经删去,所以不存在某个数乘上k之后为k^2 所以k^2可以留下,然后因为有k^2,所以k^3就是k^2的k倍,所以k^3要删去 ...

  3. 紫书 习题7-14 UVa 307(暴搜+剪枝)

    这道题一开始我想的是在排序之后只在头和尾往中间靠近来找木块, 然后就WA, 事实证明这种方法是错误的. 然后参考了别人的博客.发现别人是直接暴搜, 但是加了很多剪枝, 所以不会超时. 我也想过这个做法 ...

  4. 紫书 习题 10-20 UVa 1648 (推公式)

    设一次上去a层,一次下去b层,有x次上去,有(n-x)次下去 则ax - (n-x)b >= 1 x >= (nb+1) / (a+b) 如果可以整除, x = (nb+1) / (a+b ...

  5. 紫书 习题 10-7 UVa 10539(long long + 素数筛)

    注意要开long long 如果int * int会炸 那么久改成long long * int #include<cstdio> #include<vector> #incl ...

  6. 紫书 习题 8-15 UVa 1617 (贪心)

    先排序, 然后每个线段先放右端点, 然后往下放, 如果不能放就整体往左移动, 当不能往左移动的时候就ans++ 开始下一个整块.判断能不能向左移动要用一个变量储存每个已经放了的区间中线段与左端点距离的 ...

  7. 紫书 习题 11-12 UVa 1665 (并查集维护联通分量)

    这道题要逆向思维 反过来从大到小枚举, 就是在矩阵中一点一点加进去数字,这样比较 好操作, 如果正着做就要一点一点删除数字, 不好做. 我们需要在这个过程中维护联通块的个数, 这里用到了并查集. 首先 ...

  8. 紫书搜索 例题7-10 UVA - 11212 Editing a Book 迭代加深搜索 IDA*

    题目链接: https://vjudge.net/problem/UVA-11212 题意: 题解: IDA*,每次改变深度上限去剪枝 代码: 1 #include <bits/stdc++.h ...

  9. 紫书搜索 例题7-5 UVA - 129 Krypton Factor

    题目链接: https://vjudge.net/problem/UVA-129 题意: 题解: 代码: #include <bits/stdc++.h> using namespace ...

最新文章

  1. linux指令笔试,Linux笔试常用命令
  2. 深度学习核心技术精讲100篇(三十八)-滴滴司机调度系统实践
  3. Java 类的生命周期详解
  4. dropbox文件_Dropbox即将发布的扩展程序更新将添加更多文件编辑支持,包括Pixlr照片...
  5. java基础—线程间的通讯 生产者与消费者
  6. 飞书上线“程序员友好”功能 迎接1024程序员节
  7. windows下批处理删除文件及注册表项
  8. 为什么你应该在 OpenResty 项目中使用 lua-resty-core
  9. SIGCHLD waitpid, 小心子进程结束事件被偷了
  10. SSH终端仿真器:ZOC 8 for Mac
  11. vmware桌面云建设项目方案建议书(包含GPU)
  12. UE4 UI界面的层级切换
  13. 四招搞定托业(TOEIC)英语阅读
  14. Cloudera Manager5.15.0安装教程,每步附图,超详细
  15. Postman测试文件图片上传接口
  16. php输出世界时转北京时,php中把美国时间转为北京时间的自定义函数分享
  17. AndroMDA Getting started(七)
  18. kali之vulhub,medium_socnet
  19. 用VideoView实现播放本地的m3u8
  20. 【MineCraft】-- 使用Java开发我的世界Mod

热门文章

  1. Java版二叉树遍历,查找,顺序化存储代码实现
  2. LCP 1. 猜数字
  3. kali安装pip3
  4. 【游记】CCHO TY国初划水记
  5. Java 设计模式(3)单例模式
  6. 世纪互联、微软Azure与无穷小微积分
  7. 中国最闷声发大财的城市,人均GDP超杭州
  8. 12306验证码为什么那么变态?都是这项深度学习应用给逼的
  9. 什么是大数据「实时流计算」?深度解析它的4大应用及4个特点
  10. 人间不值得?250000条数据分析李诞是不是被骂火的