【BZOJ 4570】【SCOI 2016】妖怪
http://www.lydsy.com/JudgeOnline/problem.php?id=4570
对于每个妖怪的两个值,看成二位平面上的一个点的横纵坐标(x,y)。
因为只关心a/b,所以设经过这个点的斜率为k,那么妖怪的战斗力为\(x+y-kx-\frac yk\)。
对于一个k,要找所有妖怪的战斗力的最大值,只要在这些点的凸壳上查找就可以了。
对于凸壳上的每个点,检查这个点的战斗力最小时的斜率k会不会影响周围的两个点再更新,最后再统计凸壳上相邻两点的斜率来更新就可以了。
时间复杂度\(O(n\log n)\)。
关于战斗力,斜率之类的式子一定不能推错啊!
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 1000003;
struct Point {
double x, y;
Point (double _x = 0, double _y = 0) : x(_x), y(_y) {}
Point operator - (const Point &A) const {
return Point(x - A.x, y - A.y);
}
bool operator < (const Point &A) const {
return x == A.x ? y > A.y : x > A.x;
}
} P[N];
double Cross(const Point &A, const Point &B) {
return (A.x * B.y - A.y * B.x) > 1e-8 ? 1 : -1;
}
int n, id[N];
double K(const int &a, const int &b) {return (P[b].y - P[a].y) / (P[b].x - P[a].x);}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
scanf("%lf%lf", &P[i].x, &P[i].y);
stable_sort(P + 1, P + n + 1);
int top = 1;
id[1] = 1;
for (int i = 2; i <= n; ++i) {
while (top > 1 && Cross(P[i] - P[id[top]], P[id[top]] - P[id[top - 1]]) >= 0) --top;
id[++top] = i;
}
while (top > 1 && (P[id[top]].y <= P[id[top - 1]].y)) --top;
double k, ans = 1e20;
for (int i = 1; i <= top; ++i) {
k = -sqrt(1.0 * P[id[i]].y / P[id[i]].x);
if ((i == 1 || K(id[i - 1], id[i]) < k) && (i == top || K(id[i], id[i + 1]) > k))
ans = min(ans, P[id[i]].x + P[id[i]].y + 2.0 * sqrt(P[id[i]].x * P[id[i]].y));
}
for (int i = 1; i < top; ++i) {
k = K(id[i], id[i + 1]);
ans = min(ans, P[id[i]].x + P[id[i]].y - P[id[i]].x * k - P[id[i]].y / k);
}
printf("%.4lf\n", ans);
return 0;
}
【BZOJ 4570】【SCOI 2016】妖怪的更多相关文章
- bzoj 4568 [SCOI 2016] 幸运数字
题目大意 给定一棵\(n\)个点的树,每个点有权值 \(q\)次询问树上路径中 每个点权值可选可不选的最大异或和 \(n\le 2*10^4,q\le 2*10^5,val[i]\le 2^{60}\ ...
- bzoj 4570 妖怪
bzoj 4570 妖怪 正解应该是 \(O(nlogn)\) 的凸包,但被我的 \(O(100n)\) 的三分水过去了. 记 $x=\frac b a $ ,显然有 \(strength_i=ATK ...
- BZOJ 4570: [Scoi2016]妖怪
二次联通门 : BZOJ 4570: [Scoi2016]妖怪 二次联通门 : luogu P3291 [SCOI2016]妖怪 LibreOJ : LibreOJ #2015. 「SCOI2016 ...
- [LOJ 2083][UOJ 219][BZOJ 4650][NOI 2016]优秀的拆分
[LOJ 2083][UOJ 219][BZOJ 4650][NOI 2016]优秀的拆分 题意 给定一个字符串 \(S\), 求有多少种将 \(S\) 的子串拆分为形如 AABB 的拆分方案 \(| ...
- [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩)
[BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩) 题面 给出一棵树和一个图,点数均为n,问有多少种方法把树的节点标号,使得对于树上的任意两个节点u,v,若树上u ...
- SCOI 2016 萌萌哒
SCOI 2016 萌萌哒 solution 有点线段树的味道,但是并不是用线段树来做,而是用到另外一个区间修改和查询的利器--ST表 我们可以将一个点拆成\(logN\)个点,分别代表从点\(i\) ...
- 【BZOJ 4568】【SCOI 2016】幸运数字
写了一天啊,调了好久,对拍了无数次都拍不出错来(数据生成器太弱了没办法啊). 错误1:把线性基存成结构体,并作为函数计算,最后赋值给调用函数的变量时无疑加大了计算量导致TLE 错误2:像这种函数(A, ...
- bzoj 4570: [Scoi2016]妖怪 凸包
题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=4570 题解 我们知道如果一个怪物要取到攻击力的最大值,那么一定是把防御力都转化了 所以我 ...
- 【BZOJ 4569】【SCOI 2016】萌萌哒
http://www.lydsy.com/JudgeOnline/problem.php?id=4569 用ST表表示所有区间,根据ST表中表示的区间长度种一棵nlogn的树,类似线段树,每个节点的左 ...
随机推荐
- 【BZOJ4819】【SDOI2017】新生舞会 [费用流][分数规划]
新生舞会 Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 学校组织了一次新生舞会,Cathy ...
- 「6月雅礼集训 2017 Day10」quote
[题目大意] 一个合法的引号序列是空串:如果引号序列合法,那么在两边加上同一个引号也合法:或是把两个合法的引号序列拼起来也是合法的. 求长度为$n$,字符集大小为$k$的合法引号序列的个数.多组数据. ...
- ios资源加载策略
做了好几个月的ios,大框架都是别人搭好的,自己只是实现逻辑,很是失落.慢慢开始整理学习一些概念类的东西吧,希望自己能提高点. cocos2d-x从cocos2d-2.0-x-2.0.2开始,考虑到自 ...
- 【洛谷 P4116】 Qtree3 (树链剖分)
题目链接 树剖练手题,想复习下树剖. 第一次提交\(T\)成QQC 看我 ??? 看了数据范围的确挺恶心的,我的复杂度是\(O(Mlog^2N)\)的,数据范围有三段 For 1/3 of the t ...
- 一个简单插件this传值的跟踪
<!DOCUTYPE html> <html> <head> <meta charset="UTF-8"> <script s ...
- Centos 7 安装jdk1.7
在linux中安装jdk是很平凡的事情了,刚学习linux给自己留下一笔记.刚安装centos其中可以会附带jdk,但是这并不影响,只要下载自己的jdk然后替换相对应的环境变量即可. 1.下载相对应的 ...
- 【Python学习笔记】Coursera课程《Using Python to Access Web Data》 密歇根大学 Charles Severance——Week6 JSON and the REST Architecture课堂笔记
Coursera课程<Using Python to Access Web Data> 密歇根大学 Week6 JSON and the REST Architecture 13.5 Ja ...
- SIFT四部曲之——高斯滤波
本文为原创作品,未经本人同意,禁止转载 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/ 或 ...
- EasyHook远程进程注入并hook api的实现
EasyHook远程进程注入并hook api的实现 http://blog.csdn.net/v6543210/article/details/44276155
- c++设计模式系列----factory模式
问题: 假设我们要开发一个游戏--打怪物,首先,游戏有分等级,假设有初级,中级两个个等级(就不用flappy bird模式了,那个比较特殊,对一个玩家来说是难以具有持久吸引力的!),不同的等级怪物也是 ...