BZOJ 4570: [Scoi2016]妖怪
二次联通门 : BZOJ 4570: [Scoi2016]妖怪
二次联通门 : luogu P3291 [SCOI2016]妖怪
LibreOJ : LibreOJ #2015. 「SCOI2016」妖怪
- /*
- BZOJ 4570: [Scoi2016]妖怪
- 凸包
- 我果然还是naive
- 看见这题就想二分
- 结果惨挂
- 做了凸包后就想三分
- 又挂了。。
- 完美落入了每个坑。。果然还是自己太菜
- 对于每个妖怪,其在(a,b)时的最大战力为过当前点斜率为(-b/a)的直线的截距之和
- 最大的战力就是最外面的那条直线
- 对n个点做一个上凸包
- 最大值一定在凸包的右上部分(自行脑补)
- 那么这些点的斜率都有着一个范围ki-1<ki<ki+1
- 那么战力就变为了一个双钩函数
- 讨论求最值即可
- */
- #include <algorithm>
- #include <iostream>
- #include <cstdio>
- #include <cmath>
- void read (long long &now)
- {
- register char word = getchar ();
- int temp = ;
- for (now = ; !isdigit (word); word = getchar ())
- if (word == '-')
- temp = ;
- for (; isdigit (word); now = now * + word - '', word = getchar ());
- if (temp)
- now = -now;
- }
- #define INF 1e9
- struct Point
- {
- long long x, y;
- Point (long long __x, long long __y) : x (__x), y (__y) {}
- Point () {}
- bool operator < (const Point &now) const
- {
- return this->x == now.x ? this->y < now.y : this->x < now.x;
- }
- Point operator - (const Point &now) const
- {
- return Point (this->x - now.x, this->y - now.y);
- }
- };
- inline long long Cross (const Point &A, const Point &B)
- {
- return A.x * B.y - A.y * B.x;
- }
- #define Max 1000250
- inline double Calculate (const Point &now, const double &k)
- {
- return k >= ? INF : (double) now.x + now.y + - k * now.x - now.y / k;
- }
- inline double Get_point_k (const Point &now)
- {
- return -sqrt ((double) now.y / now.x);
- }
- inline double Get_line_k (const Point &A, const Point &B)
- {
- return (A.x ^ B.x) ? ((double)(A.y - B.y) / (double) (A.x - B.x)) : INF;
- }
- int Get_convex_Hull (Point *point, int N, Point *Stack)
- {
- std :: sort (point + , point + N + );
- register int top = ;
- for (int i = ; i <= N; ++ i)
- {
- for (; top > && Cross (Stack[top] - Stack[top - ], point[i] - Stack[top - ]) >= ; -- top);
- Stack[++ top] = point[i];
- }
- return top;
- }
- Point yukari[Max], Stack[Max];
- int main (int argc, char *argv[])
- {
- register int i;
- int N;
- scanf ("%d", &N);
- for (i = ; i <= N; ++ i)
- read (yukari[i].x), read (yukari[i].y);
- int M = Get_convex_Hull (yukari, N, Stack);
- if (M < )
- {
- printf ("%.4lf", Calculate (Stack[], Get_point_k (Stack[])));
- return ;
- }
- double k, _k, __k, Answer = INF;
- k = Get_point_k (Stack[]);
- __k = Get_line_k (Stack[], Stack[]);
- if (k >= __k)
- Answer = std :: min (Answer, Calculate (Stack[], k));
- k = Get_point_k (Stack[M]);
- _k = Get_line_k (Stack[M - ], Stack[M]);
- if (k <= _k)
- Answer = std :: min (Answer, Calculate (Stack[M], k));
- Answer = std :: min (Answer, Calculate (Stack[M], _k));
- for (i = ; i < M; ++ i)
- {
- _k = Get_line_k (Stack[i - ], Stack[i]);
- __k = Get_line_k (Stack[i], Stack[i + ]);
- k = Get_point_k (Stack[i]);
- Answer = std :: min (Answer, Calculate (Stack[i], _k));
- if (k <= _k && k >= __k)
- Answer = std :: min (Answer, Calculate (Stack[i], k));
- }
- printf ("%.4lf", Answer);
- return ;
- }
BZOJ 4570: [Scoi2016]妖怪的更多相关文章
- bzoj 4570: [Scoi2016]妖怪 凸包
题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=4570 题解 我们知道如果一个怪物要取到攻击力的最大值,那么一定是把防御力都转化了 所以我 ...
- BZOJ4570: [Scoi2016]妖怪
题目传送门 4570: [Scoi2016]妖怪 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 491 Solved: 125 [Submit][Sta ...
- [Bzoj4570][Scoi2016]妖怪(右上凸包)
4570: [Scoi2016]妖怪 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1110 Solved: 336[Submit][Status][ ...
- bzoj 4570 妖怪
bzoj 4570 妖怪 正解应该是 \(O(nlogn)\) 的凸包,但被我的 \(O(100n)\) 的三分水过去了. 记 $x=\frac b a $ ,显然有 \(strength_i=ATK ...
- BZOJ 4571: [Scoi2016]美味
二次联通门 : BZOJ 4571: [Scoi2016]美味 /* BZOJ 4571: [Scoi2016]美味 dalao们都在说这题如果没有加法balabala就可以用可持久化trie解决了 ...
- 【BZOJ 4570】【SCOI 2016】妖怪
http://www.lydsy.com/JudgeOnline/problem.php?id=4570 对于每个妖怪的两个值,看成二位平面上的一个点的横纵坐标(x,y). 因为只关心a/b,所以设经 ...
- BZOJ4570:[SCOI2016]妖怪——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4570 邱老师是妖怪爱好者,他有n只妖怪,每只妖怪有攻击力atk和防御力dnf两种属性.邱老师立志成 ...
- BZOJ 4568: [Scoi2016]幸运数字 [线性基 倍增]
4568: [Scoi2016]幸运数字 题意:一颗带点权的树,求树上两点间异或值最大子集的异或值 显然要用线性基 可以用倍增的思想,维护每个点向上\(2^j\)个祖先这些点的线性基,求lca的时候合 ...
- bzoj 4571: [Scoi2016]美味 (主席树)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4571 题面; 4571: [Scoi2016]美味 Time Limit: 30 Sec ...
随机推荐
- Docker 学习笔记(一):基础命令
仅为个人查阅使用,要学习 Docker 的话,推荐看这份文档:<Docker - 从入门到实践> P.S. 大多数的 docker container xxx/docker image x ...
- javascript之instanceof
定义和用法 instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上. 语法: object instanceof construct ...
- Python Unittest进行接口测试的简单示例
今年肯定是要把Python学到一定程度的,否则感觉自己混不下去了,那就开始半挣扎的咸鱼生活吧. ---------------------------------------------------- ...
- webstorm处理代码冲突
出现这个冲突界面后,不要关闭弹窗,不然会把冲突更新下来,也不要点merge. 正确做法:双击文件开始解决冲突!!!!
- J.U.C之AQS:CLH同步队列
此篇博客所有源码均来自JDK 1.8 在上篇博客[死磕Java并发]—–J.U.C之AQS:AQS简介中提到了AQS内部维护着一个FIFO队列,该队列就是CLH同步队列. CLH同步队列是一个FIFO ...
- 学习到目前,自己封装的db类和pdo类
DB封装类 <?php class DBDA { public $host = "localhost"; public $uid = "root"; pu ...
- cdc跨时钟域处理-结绳握手法
参考文档 https://blog.csdn.net/u011412586/article/details/10009761 前言 对于信号需要跨时钟域处理而言,最重要的就是确保数据能稳定的传送到采样 ...
- 如何11 周打造全能Python工程师!
在这个大数据和人工智能的时代,不管你是编程初学者,还是想学习一门其他语言充实自己,Python都是最好的选择之一. 它简洁.优雅.易学,被越来越多的大学作为计算机新生的入门语言: 它是大数据和人工智能 ...
- TLS之殇如何把我逼上绝望
1.协议的形式化分析,前提是弄清楚协议结构和协议参与者之间的会话交互,以及会话之间使用的加解密算法,签名算法,认证算法,等牵扯的算法.之后便是将要分析的协议部分进行抽象化,具体抽象涉及协议参与者(发起 ...
- springboot Properties加载顺序源码分析
关于properties: 在spring框架中properties为Environment对象重要组成部分, springboot有如下几种种方式注入(优先级从高到低): 1.命令行 java -j ...