博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ4570 SCOI2016妖怪(三分)
阅读量:5319 次
发布时间:2019-06-14

本文共 1252 字,大约阅读时间需要 4 分钟。

  strength=atk*(1+b/a)+dnf*(1+a/b)。设a/b=x,可以发现这是一个关于x的对勾函数。开口向上的一堆凸函数取max还是凸函数,三分即可。

  然而无良出题人既卡精度又卡时间。众所周知三分的本质是二分(雾),所以开始三分时令每次取的两个点为中点±eps,最后再用真的三分微调即可。具体边界多试几次就行了。跑的挺快还能剩下1s(大雾)。

#include
#include
#include
#include
#include
#include
using namespace std;#define ll long long#define N 1000010int read(){ int x=0,f=1;char c=getchar(); while (c<'0'||c>'9') { if (c=='-') f=-1;c=getchar();} while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar(); return x*f;}char getc(){ char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')) c=getchar();return c;}int gcd(int n,int m){ return m==0?n:gcd(m,n%m);}int n;struct data{ int x,y;}a[N];double calc(double x){ double s=0; for (int i=1;i<=n;i++) s=max(s,a[i].x*(1+x)+a[i].y*(1+1/x)); return s;}int main(){#ifndef ONLINE_JUDGE freopen("bzoj4570.in","r",stdin); freopen("bzoj4570.out","w",stdout); const char LL[]="%I64d\n";#else const char LL[]="%lld\n";#endif n=read(); for (int i=1;i<=n;i++) a[i].x=read(),a[i].y=read(); double eps=1E-8; double l=eps,r=1/eps; while (l+1E-6<=r) { double mid1=(l+r)/2-eps,mid2=(l+r)/2+eps; if (calc(mid1)

 

转载于:https://www.cnblogs.com/Gloid/p/9890917.html

你可能感兴趣的文章
java基础(一):我对java的三个环境变量的简单理解和配置
查看>>
arcgis api 4.x for js 结合 Echarts4 实现散点图效果(附源码下载)
查看>>
YTU 2625: B 构造函数和析构函数
查看>>
apache自带压力测试工具ab的使用及解析
查看>>
C#使用Xamarin开发可移植移动应用(2.Xamarin.Forms布局,本篇很长,注意)附源码
查看>>
jenkins搭建
查看>>
C#中使用Split分隔字符串的技巧
查看>>
加固linux
查看>>
IPSP问题
查看>>
10.17动手动脑
查看>>
WPF中Image显示本地图片
查看>>
Windows Phone 7你不知道的8件事
查看>>
java的二叉树树一层层输出,Java构造二叉树、树形结构先序遍历、中序遍历、后序遍历...
查看>>
php仿阿里巴巴,php实现的仿阿里巴巴实现同类产品翻页
查看>>
面对问题,如何去分析?(日报问题)
查看>>
nodejs vs python
查看>>
poj-1410 Intersection
查看>>
Java多线程基础(一)
查看>>
SQL Server中利用正则表达式替换字符串
查看>>
POJ 1015 Jury Compromise(双塔dp)
查看>>