bzoj 4570 妖怪

  • 正解应该是 \(O(nlogn)\) 的凸包,但被我的 \(O(100n)\) 的三分水过去了.
  • 记 $x=\frac b a $ ,显然有 \(strength_i=ATK_i+DFN_i+ATK_i\ \cdot\ x+DFN_i\ \cdot\ \frac 1 x\).
  • 每个\(strength\) 关于 \(x\) 是一个单峰函数,取最大值形成的函数也是一个单峰函数,三分 \(x\) 即可.
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mp make_pair
#define pii pair<int,int>
inline int read()
{
int x=0;
bool pos=1;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())
if(ch=='-')
pos=0;
for(;isdigit(ch);ch=getchar())
x=x*10+ch-'0';
return pos?x:-x;
}
const double eps=1e-9;
const int T=100;
int dcmp(double x)
{
return fabs(x)<eps?0:(x>0?1:-1);
}
double Max(double a,double b)
{
return dcmp(a-b)>=0?a:b;
}
double Min(double a,double b)
{
return dcmp(a-b)>=0?b:a;
}
const int MAXN=1e6+10;
int n;
double p[MAXN],q[MAXN];
double ans=1e18;
double calc(double x)
{
double res=0;
for(int i=1;i<=n;++i)
{
double str=p[i]+q[i]+p[i]*x+q[i]/x;
res=Max(res,str);
}
return res;
}
double mx=0;
int main()
{
n=read();
for(int i=1;i<=n;++i)
{
scanf("%lf%lf",&p[i],&q[i]);
mx=Max(mx,q[i]);
}
double L=eps*1000,R=1e8;
for(int t=1;t<=T;++t)
{
double x1=L+(R-L)/3;
double x2=R-(R-L)/3;
double f1=calc(x1);
double f2=calc(x2);
if(dcmp(f1-f2)>=0)
{
ans=Min(ans,f2);
L=x1;
}
else
{
ans=Min(ans,f1);
R=x2;
}
}
printf("%.4lf\n",ans);
return 0;
}

bzoj 4570 妖怪的更多相关文章

  1. BZOJ 4570: [Scoi2016]妖怪

    二次联通门 : BZOJ 4570: [Scoi2016]妖怪 二次联通门 : luogu P3291 [SCOI2016]妖怪 LibreOJ : LibreOJ  #2015. 「SCOI2016 ...

  2. 【BZOJ 4570】【SCOI 2016】妖怪

    http://www.lydsy.com/JudgeOnline/problem.php?id=4570 对于每个妖怪的两个值,看成二位平面上的一个点的横纵坐标(x,y). 因为只关心a/b,所以设经 ...

  3. bzoj 4570: [Scoi2016]妖怪 凸包

    题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=4570 题解 我们知道如果一个怪物要取到攻击力的最大值,那么一定是把防御力都转化了 所以我 ...

  4. BZOJ4570: [Scoi2016]妖怪

    题目传送门 4570: [Scoi2016]妖怪 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 491 Solved: 125 [Submit][Sta ...

  5. bzoj 3669: [Noi2014]魔法森林

    bzoj 3669: [Noi2014]魔法森林 Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号 ...

  6. BZOJ4570:[SCOI2016]妖怪——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4570 邱老师是妖怪爱好者,他有n只妖怪,每只妖怪有攻击力atk和防御力dnf两种属性.邱老师立志成 ...

  7. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  8. [Bzoj4570][Scoi2016]妖怪(右上凸包)

    4570: [Scoi2016]妖怪 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1110  Solved: 336[Submit][Status][ ...

  9. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

随机推荐

  1. python中的参数传递

    一般的参数顺序是先位置,再关键字,然后是包裹位置传递,包裹关键字传递.

  2. perl I/O和缓存的关系

    最近在查看日志时,突然发现信息没有及时写入日志,研究了很久,突然醒悟:原来是print的缓存原因. 顺着这个详细了解了下perl里的IO缓存机制: 1.正常情况下,操作系统的读写都有缓存(buffer ...

  3. shell基本认识

    shell基本认识 bash # echo $BASH /bin/bash 第一个shell脚本first_shell.sh #!/bin/bash echo "Hello world!&q ...

  4. CountDownLatch await可能存在的问题

    执行countdown的某个子线程可能会因为某些原因无法执行countdown,这样就会导致await线程一直阻塞下去. 在线程池中多次调用await方法,因为await方法会阻塞一段时间,有可能导致 ...

  5. LeetCode第[91]题(Java):Decode Ways(解码方法数)

    题目:解码方法数 难度:Medium 题目内容: A message containing letters from A-Z is being encoded to numbers using the ...

  6. R-模式(mode)和类(class)

    数据模式:mode函数显示任何对象的模式.常见的单个的对象模式是逻辑型(Logical).数值型(Numeric).字符型(Character). 常用到的数据模式是列表(list). 逻辑型:TRU ...

  7. 仅需15分钟,使用OpenCV+Keras轻松破解验证码

    https://baijia.baidu.com/s?id=1586732712477979223&wfr=pc&fr=app_lst

  8. ACM比赛辅导--授课内容

    Lesson1(3月19日) 1.讲解Dev-C++.VC++6.0的单步调试方法 2.学习比赛的基本输入输出,练习C语言网的1085—1092 Lesson2(3月21日) 1.学习挑战程序设计,第 ...

  9. FlexboxLayout——Android弹性布局

    FlexboxLayout是一个Android平台上与CSS的 Flexible box 弹性盒子布局模块 有相似功能的库.Flexbox 是CSS 的一种布局方案,可以简单.快捷的实现复杂布局. F ...

  10. AOP(面向切面)的粗俗理解

    百度百科的解释:AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果. 一个比较绕的概念,简单来说就是把不影响业 ...