【BZOJ4570】 [Scoi2016]妖怪
Description
Input
Output
输出在最不利情况下最强妖怪的战斗力值,保留4位小数。
Sample Input
1 1
1 2
2 2
Sample Output
Solution
这题好像很多种做法。下面介绍一种。
凸包。
对于一个固定的k,那么a,b的取值范围是在一条第一象限的线段上。而最大化的目标其实就是这条线段和x,y轴的截距之和。
那么可以证明,能贡献答案的点一定在上凸壳上。对于凸包上的每一个点,考虑用前后的两条直线去截它然后贡献答案。对于在中间的直线可以通过计算得出最优解。
(计算过程因为这里不是markdown编辑器公式不是那么好打所以就不推了,大概就是把直线方程设出来,根据直接过(a,b)点这个条件然后消掉一个未知量,最后把最大化的东西写出来发现可以用基本不等式啥的搞一搞就好了)
Code
1 #include <cstdio> 2 #include <cmath> 3 #include <algorithm> 4 5 #define R register 6 #define maxn 1000010 7 #define cmin(_a, _b) (_a > (_b) ? _a = (_b) : 0) 8 typedef double db; 9 struct Poi { 10 db x, y; 11 inline bool operator < (const Poi &that) const {return x < that.x || (x == that.x && y < that.y);} 12 inline Poi operator - (const Poi &that) const {return (Poi) {x - that.x, y - that.y};} 13 inline db operator * (const Poi &that) const {return x * that.y - y * that.x;} 14 } p[maxn], st[maxn]; 15 db slope(R Poi x) {return x.y / x.x;} 16 int main() 17 { 18 // freopen("in.in", "r", stdin); 19 R int n; scanf("%d", &n); 20 for (R int i = 1; i <= n; ++i) scanf("%lf%lf", &p[i].x, &p[i].y); 21 std::sort(p + 1, p + n + 1); 22 st[1] = p[1]; R int top = 1; 23 for (R int i = 2; i <= n; ++i) 24 { 25 while (top > 1 && (p[i] - st[top - 1]) * (st[top] - st[top - 1]) <= 0) --top; 26 st[++top] = p[i]; 27 } 28 R db ans = 1.0 / 0.0; 29 for (R int i = 1; i <= top; ++i) 30 { 31 R db lef = i == 1 ? 0 : slope(st[i] - st[i - 1]); 32 R db rig = i == top ? -1.0 / 0.0 : slope(st[i + 1] - st[i]); 33 R db k = -sqrt(slope(st[i])); 34 if (lef >= k && k >= rig) 35 cmin(ans, st[i].x + st[i].y - k * st[i].x - st[i].y / k); 36 if (i > 1) 37 { 38 k = slope(st[i] - st[i - 1]); 39 cmin(ans, st[i].x + st[i].y - k * st[i].x - st[i].y / k); 40 } 41 } 42 printf("%.4lf\n", ans); 43 return 0; 44 }
转载于:https://www.cnblogs.com/cocottt/p/6781225.html
【BZOJ4570】 [Scoi2016]妖怪相关推荐
- bzoj4570: [Scoi2016]妖怪【凸包+对勾函数最小值】
Description 邱老师是妖怪爱好者,他有n只妖怪,每只妖怪有攻击力atk和防御力dnf两种属性.邱老师立志成为妖怪大师,于 是他从真新镇出发,踏上未知的旅途,见识不同的风景.环境对妖怪的战斗力 ...
- 4570: [Scoi2016]妖怪
4570: [Scoi2016]妖怪 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 591 Solved: 152 [Submit][Status] ...
- [SCOI2016]妖怪 牛客网的ACM省选题,个人看法,欢迎交流
链接:https://ac.nowcoder.com/acm/contest/390/1001 来源:牛客网 题目描述 邱老师是妖怪爱好者,他有n只妖怪,每只妖怪有攻击力atk和防御力dnf两种属性. ...
- bzoj 4570: [Scoi2016]妖怪 凸包
题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=4570 题解 我们知道如果一个怪物要取到攻击力的最大值,那么一定是把防御力都转化了 所以我 ...
- SCOI2016 Day2 简要题解
「SCOI2016」妖怪 题意 有 \(n\) 只妖怪,每只妖怪有攻击力 \(\text{atk}\) 和防御力 \(\text{dnf}\) ,在环境 \((a, b)\) 下,它可以把攻击力和防御 ...
- BZOJ4569: [Scoi2016]萌萌哒
4569: [Scoi2016]萌萌哒 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 961 Solved: 464 [Submit][Statu ...
- bzoj [Scoi2016]美味
[Scoi2016]美味 Time Limit: 30 Sec Memory Limit: 256 MB Submit: 721 Solved: 391 [Submit][Status][Disc ...
- Bzoj4568: [Scoi2016]幸运数字
Bzoj4568: [Scoi2016]幸运数字 线性基+倍增+LCA 原来线性基还能这么考--一开始看到这个题以为是树上差分线性基,然而线性基不支持删除,所以就挂了. 后来想到倍增线性基,其实到这里 ...
- nyoj999 师傅又被妖怪抓走了 (预处理+bfs+状态压缩)
题目999 题目信息 执行结果 本题排行 讨论区 师傅又被妖怪抓走了 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描写叙述 话说唐僧复得了孙行者,师徒们一心同体,共诣西方.自宝 ...
最新文章
- SqlServer索引的原理与应用
- Java中怎样使用反射根据属性名获取和设置属性的值
- 安顺那里有学计算机,安顺计算机专业学费
- linux函数地址获取函数名,函数名/函数地址/函数指针
- BZOJ 1083: [SCOI2005]繁忙的都市【Kruscal最小生成树裸题】
- Jstatd命令(Java Statistics Monitoring Daemon)
- thinkphp页面请求时间超过40S报404错误解决办法
- 如何在Vue项目中使用websql数据库
- IDEA破解方法,永久激活
- Android APP完整基础教程(01)开发环境简介
- 龙芯2f平台下 Debain 6编译Lighttpd并支持C语言cgi脚本编程
- 惠普电脑调节电脑亮度
- 毒盘解析[JIE版]百毒网盘在线解析
- LRU算法模拟器(基于Java和VUE前端实现)
- 老毛子固件路由器挂载usb摄像头
- 豆瓣,流行的秘密(解密流行真相)
- 解决台式机突然卡死的问题
- AI落地制造业:智能机器人应具备这4种能力
- 【杂谈与乱码】后缀名修改
- cannot do a partial commit during a merge.