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 ...
随机推荐
- closed channel
func Test_chanel(t *testing.T) { c := make(chan int, 1) go func() { time.Sleep(time.Second * 3) clos ...
- 基于openfire的IM即时通讯软件开发
openfire:http://www.igniterealtime.org/ Xmpp:http://xmpp.org/ IOS(xmppframework):https://github.com/ ...
- NOI2000 青蛙过河[递推]
也许更好的阅读体验 \(\mathcal{Description}\) 原题链接: Comet OJ 洛谷 大小各不相同的一队青蛙站在河左岸的石墩(记为A)上,要过到对岸的石墩(记为D)上去.河心有几 ...
- sqlserver case when 的使用方法
sql使用case when then 判断某字段是否为null没效果 CASE columnName WHEN null THEN 0 ELSE columnName END虽然columnName ...
- javascript -- 时间转换
function numFormat(num){ //时间处理 return ('00' + num).substr(-2); #处理 日期前面有0的情况}function timeFormat ...
- [转]全网最!详!细!tarjan算法讲解
转发地址:https://blog.csdn.net/qq_34374664/article/details/77488976 原版的地址好像挂了..... 看到别人总结的很好,自己就偷个懒吧..以下 ...
- Fatal error:Call to undefined function mysqli_connect() in .php line 报错
这样的问题,多半是PHP配置问题. 修改php配置文件 1.在php(版本:php-7.2.7-Win32-VC15-x64)文件夹中一开始不会看到php.ini,而是php.ini-developm ...
- AE开发—利用IQueryFilter接口进行属性查询
在ArcGis Engine二次开发过程中,经常会需要用到查询统计的功能,而IQueryFilter是最常见的属性字段查询接口,可以用来做一些简单的查询工作. 现在有一些公交站点和公交路线的数据,可视 ...
- OpenWrt增加软件包
变量名含义 SECTION //包的种类 CATEGORY //显示在menuconfig的哪个目录下 SUBMENU //menuconfig子目录 TITLE //简单的介绍 DESCRIPTIO ...
- 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用
2016年时,Jerry曾经写过一系列关于SAP Fiori Smart Template(现在更名为Fiori Elements了)的博客,介绍了所谓的MDD开发方法论 - Metadata Dri ...