4570: [Scoi2016]妖怪
4570: [Scoi2016]妖怪
Time Limit: 10 Sec Memory Limit: 64 MB
Submit: 591 Solved: 152
[Submit][Status][Discuss]
Description
Input
Output
输出在最不利情况下最强妖怪的战斗力值,保留4位小数。
Sample Input
1 1
1 2
2 2
Sample Output
HINT
Source
[Submit][Status][Discuss]
很容易想到二分答案,然后所有妖怪列一个一元二次不等式,看解集的交集是否为空
但这样会TLE。。。。GG
可以把每只妖怪放到二维平面上形成一个点(x,y),过它作一条斜率<0的直线
这样截距和就是某个(a,b)状态下的战斗力了,斜率为-b/a时
对所有点求一个凸包,最大值肯定只出现在凸包右上部分
直接枚举那一块就好了,每个点有个斜率的范围,在这个范围内它都是战力最大的
简单的数学推导可以知道,点(x,y)在斜率为k时的战力为x + y - k*x - y/k >= x + y + 2*sqrt(x*y)
要注意这个斜率能否取到,,如果可以就是这个值,否则是与前后点的斜率其中一个
毕竟这是个长得很像打钩函数的函数,,也可以求导证明
#include<iostream>
#include<cstring>
#include<vector>
#include<queue>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<bitset>
using namespace std;const int maxn = 1E6 + 10;
typedef long long LL;
typedef double DB;
const DB INF = 1E10;
const DB eps = 1E-9;struct Point{int x,y; Point(){}Point(int x,int y): x(x),y(y){}bool operator < (const Point &B) const {if (x < B.x) return 1;if (x > B.x) return 0;return y < B.y;}Point operator - (const Point &B){return Point(x - B.x,y - B.y);}
}p[maxn],s[maxn*2];
typedef Point Vector;int n,tp;
DB Ans = 1E16;LL Cross(const Vector &v1,const Vector &v2) {return 1LL*v1.x*v2.y - 1LL*v2.x*v1.y;}
bool Equal(const DB &x,const DB &y) {return fabs(x - y) <= eps;}
bool fcmp(const DB &x,const DB &y) {return x > y || Equal(x,y);}DB slope(Point p1,Point p2)
{Point p = p2 - p1;return Equal(p.x,0.000)?INF:(DB)(p.y)/(DB)(p.x);
}void Work(DB K,Point p)
{if (fabs(K) < eps) return;DB x = p.x,y = p.y;Ans = min(Ans,x + y - K*x - y/K);
}int getint()
{char ch = getchar(); int ret = 0;while (ch < '0' || '9' < ch) ch = getchar();while ('0' <= ch && ch <= '9')ret = ret*10 + ch - '0',ch = getchar();return ret;
}int main()
{#ifdef DMCfreopen("DMC.txt","r",stdin);#elsefreopen("4570.in","r",stdin);freopen("4570.out","w",stdout);#endifn = getint();for (int i = 1; i <= n; i++){int x = getint(),y = getint();p[i] = Point(x,y);}sort(p + 1,p + n + 1);for (int i = 1; i <= n; i++){while (tp > 1 && Cross(p[i] - s[tp-1],s[tp] - s[tp-1]) > 0) --tp;s[++tp] = p[i];}int k = tp;for (int i = n - 1; i; i--){while (tp > k && Cross(p[i] - s[tp-1],s[tp] - s[tp-1]) > 0) --tp;s[++tp] = p[i];}--tp; s[0] = s[tp]; s[tp+1] = s[1];if (tp == 1) Work(-sqrt((DB)(s[1].y)/(DB)(s[1].x)),s[1]);for (int i = k; i <= tp; i++){DB B = slope(s[i],s[i-1]),A = slope(s[i+1],s[i]);if (fcmp(A,0.000) && fcmp(B,0.000)) continue;if (B > A) B = -INF;DB K = -sqrt((DB)(s[i].y)/(DB)(s[i].x));if (B <= K && K <= A) Work(K,s[i]);else Work(A,s[i]),Work(B,s[i]);if (fcmp(A,0.000)) break;}printf("%.4f",Ans);return 0;
}
4570: [Scoi2016]妖怪相关推荐
- bzoj 4570: [Scoi2016]妖怪 凸包
题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=4570 题解 我们知道如果一个怪物要取到攻击力的最大值,那么一定是把防御力都转化了 所以我 ...
- bzoj4570: [Scoi2016]妖怪【凸包+对勾函数最小值】
Description 邱老师是妖怪爱好者,他有n只妖怪,每只妖怪有攻击力atk和防御力dnf两种属性.邱老师立志成为妖怪大师,于 是他从真新镇出发,踏上未知的旅途,见识不同的风景.环境对妖怪的战斗力 ...
- [SCOI2016]妖怪 牛客网的ACM省选题,个人看法,欢迎交流
链接:https://ac.nowcoder.com/acm/contest/390/1001 来源:牛客网 题目描述 邱老师是妖怪爱好者,他有n只妖怪,每只妖怪有攻击力atk和防御力dnf两种属性. ...
- 【BZOJ4570】 [Scoi2016]妖怪
Description 邱老师是妖怪爱好者,他有n只妖怪,每只妖怪有攻击力atk和防御力dnf两种属性.邱老师立志成为妖怪大师,于 是他从真新镇出发,踏上未知的旅途,见识不同的风景.环境对妖怪的战斗力 ...
- 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 描写叙述 话说唐僧复得了孙行者,师徒们一心同体,共诣西方.自宝 ...
最新文章
- 对Thrift的一点点理解
- 多边形填充算法-有序边表法(扫描线算法) 计算机图形学
- update,options
- mysql的告警日志_运维日记|MySQL关于aborted告警日志的分析
- js创建file对象 字符串 txt_js-创建对象的多种方式
- linux未设置为接受端口,Simple gawk server
- 钱盾率先提出的“全流程屏障”究竟是怎样的一种能力?
- oracle删除的数据没有commit,在Oracle中误删除数据后并commit后的数据恢复办法
- Android ADB 你想要的都在这
- kali字典暴力破解教程
- JQuery文档分析1-JQuery核心与选择器
- 开关电源损耗分析 以Buck为例
- python 拼音地名对应关系,Python使用百度地图API根据地名获取相应经纬度
- 老祖宗留下来的千古绝句,读完终身受益
- HDU4556_欧拉函数求解法拉数列
- CoLA任务的数据增强方法
- dnf一天能获得多少黑暗之眼_DNF洞察之眼每天能打几次?洞察之眼奖励及入场方式一览_52pk...
- Cache的映像方法
- 分布式爬虫系统的设计与实现(SourceForge.net数据爬取)
- 解读唐朝??雁门勤王,兵不厌诈