Description

Input

Output

Sample Input

3
1 1
1 2
2 2

Sample Output

8.0000

Data Constraint

题解

我还挺喜欢数学的呢
这题一眼看上去不会,化化式子没想到未知数竟然是一个反比例+一次函数的样子。
长这样:ax+bx\frac a x+bxxa​+bx
当时心态就没了。
原来这玩意是一个在高中叫做双勾函数(或对勾函数或耐克函数)
很好,于是我们就看看这个玩意长什么样——

既然是长这个样子,那么应该就有一个顶点(最小点)。
利用均值不等式可以得到——
(aba,2ab)(\frac{\sqrt{ab}}a,2\sqrt{ab})(aab​​,2ab​)
由于图中有很多很多的双勾函数,那么其中必然有一些线没有用的。
我们考虑删去这些没有用的

怎么删?
首先我们对于任意两点——满足
ai&lt;aj且yi&lt;yj(答案)a_i&lt;a_j且y_i&lt;y_j(答案)ai​<aj​且yi​<yj​(答案)
那么
ai+bi+ai∗x+bix&lt;aj+bj+aj∗x+bjxa_i+b_i+a_i*x+\frac{b_i}{x}&lt;a_j+b_j+a_j*x+\frac{b_j}{x}ai​+bi​+ai​∗x+xbi​​<aj​+bj​+aj​∗x+xbj​​
化一波式子得到:
x&gt;bi−bjaj−aix&gt;\frac{b_i-b_j}{a_j-a_i}x>aj​−ai​bi​−bj​​
设c[i,j]=bi−bjaj−aic[i,j]=\frac{b_i-b_j}{a_j-a_i}c[i,j]=aj​−ai​bi​−bj​​
则我们对于一个c[i,j]&gt;c[j,k]c[i,j]&gt;c[j,k]c[i,j]>c[j,k]那么j这个点就是没有用的。
所以说,我们就得到一个序列ddd,序列满足c[di−1,di]&lt;c[di,di+1]c[d_{i-1},d_i]&lt;c[d_i,d_{i+1}]c[di−1​,di​]<c[di​,di+1​]
这个东东是递增的。
那么我们发现:当xxx在c[di−1,di]c[d_{i-1},d_i]c[di−1​,di​]到c[di,di+1]c[d_i,d_{i+1}]c[di​,di+1​]这段区间内时,did_idi​的函数值是最大的。
因此,我们在did_idi​的函数上判断这段区间的最小值即可。
怎么判断?可能有三种情况:
1、在顶点左边。
2、在顶点右边。
3、横跨顶点。

O(n)O(n)O(n)求即可。

代码

vari,j,k,l,n,m,now:longint;a,b,d:array[0..1000003] of longint;op,oq,x,y,ans,aa,bb:extended;
function min(x,y:extended):extended;
beginif x<y then exit(x);exit(y);
end;
procedure qsort(l,r:longint);
vari,j,m,m1:longint;
begini:=l;j:=r;m:=a[(l+r) div 2];m1:=b[(l+r) div 2];repeatwhile (a[i]<m) or ((a[i]=m) and (b[i]<m1)) do inc(i);while (a[j]>m) or ((a[j]=m) and (b[j]>m1)) do dec(j);if i<=j thenbegina[0]:=a[i];a[i]:=a[j];a[j]:=a[0];b[0]:=b[i];b[i]:=b[j];b[j]:=b[0];inc(i);dec(j);end;until i>j;if l<j then qsort(l,j);if r>i then qsort(i,r);
end;
function pd(i:longint):boolean;
varx,y,op,oq:extended;
beginx:=b[d[now]]-b[d[now-1]];y:=a[d[now-1]]-a[d[now]];op:=x/y;x:=b[i]-b[d[now]];y:=a[d[now]]-a[i];oq:=x/y;if op>oq then exit(true);exit(false);
end;
begin//assign(input,'monster.in');reset(input);readln(n);for i:=1 to n dobeginread(a[i],b[i]);end;qsort(1,n);now:=1;d[1]:=1;for i:=2 to n dobeginif a[i]>a[1] thenbegininc(now);d[now]:=i;j:=i;break;end;end;for i:=j+1 to n dobeginif a[i]>a[d[now]] thenbeginwhile (now>=2) and (pd(i)) do dec(now);inc(now);d[now]:=i;end;end;ans:=maxlongint;for i:=2 to now-1 dobeginx:=b[d[i]]-b[d[i-1]];y:=a[d[i-1]]-a[d[i]];op:=x/y;x:=b[d[i+1]]-b[d[i]];y:=a[d[i]]-a[d[i+1]];oq:=x/y;aa:=a[d[i]];bb:=b[d[i]];if op>sqrt(aa*bb)/aa then ans:=min(ans,aa*op+bb/op+aa+bb);if oq<sqrt(aa*bb)/aa then ans:=min(ans,aa*oq+bb/oq+aa+bb);if (op<=sqrt(aa*bb)/aa) and (oq>=sqrt(aa*bb)/aa) then ans:=min(ans,2*sqrt(aa*bb)+aa+bb);end;x:=b[d[now]]-b[d[now-1]];y:=a[d[now-1]]-a[d[now]];aa:=a[d[now]];bb:=b[d[now]];op:=x/y;if op>sqrt(aa*bb)/aa then ans:=min(ans,aa*op+bb/op+aa+bb)else ans:=min(ans,2*sqrt(aa*bb)+aa+bb);writeln(ans:0:4);
end.

转载于:https://www.cnblogs.com/RainbowCrown/p/11148359.html

jzoj4640. 【GDOI2017模拟7.15】妖怪相关推荐

  1. 【折半搜索-经典题目】中山纪念中学暑期游Day13——【GDOI2017模拟8.15】Buy

    前言 考试时有道题目用到了[折半搜索] 老师推荐了这道经典题目让大家练习[前后部分算法不同]的题目 虽然不知道我有没有时间做,好歹先把题目记录一下,免得以后找不到了qwq 题目 Input Outpu ...

  2. [双指针|模拟] leetcode 15 三数之和

    [双指针|模拟] leetcode 15 三数之和 1.题目 题目链接 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ? ...

  3. jzoj 5906. 【NOIP2018模拟10.15】传送门(树形dp)

    5906. [NOIP2018模拟10.15]传送门 Description 8102年,Normalgod在GLaDOS的帮助下,研制出了传送枪.但GLaDOS想把传送枪据为己有,于是把Normal ...

  4. 2020.03.11模拟赛15(第一题)

    1.水果盛宴(fruit) 题目描述 贝茜又再一次地闯入了 Farmer John 的房子!她在厨房发现了一堆柠檬和一堆橘子(每堆都有无限多个),并且,她希望尽可能地多吃. 贝茜的有一个饱腹值上限 T ...

  5. jzoj5904. 【NOIP2018模拟10.15】刺客信条(并查集)

    5904. [NOIP2018模拟10.15]刺客信条 Description 故事发生在1486 年的意大利,Ezio 原本只是一个文艺复兴时期的贵族,后来因为家族成员受到圣殿骑士的杀害,决心成为一 ...

  6. JZOJ 5977. 【清华2019冬令营模拟12.15】堆

    Description Input Output Sample Input 10 10 0 1 1 2 2 4 3 12 2 6 2 15 3 5 3 10 7 7 9 16 2 3 1 10 9 2 ...

  7. JZOJ 3775. 【NOIP2014模拟8.15】因子的排列

    Description 一天,小B学习了分解质因数的相关内容.他发现,一个数的质因子可以有许多不同的排列方式,例如20=2*2*5=2*5*2=5*2*2,那么小B认为20的质因子有3种不同的排列方式 ...

  8. NOIP模拟测试15「建造城市city(插板法)·轰炸·石头剪刀布」

    建造城市 题解 先思考一个简单问题 10个$toot$ 放进5间房屋,每个房屋至少有1个$toot$,方案数 思考:插板法,$10$个$toot$有$9$个缝隙,$5$间房屋转化为$4$个挡板,放在t ...

  9. jzoj3771. 【NOI2015模拟8.15】小 Z 的烦恼

    Description 小 Z 最近遇上了大麻烦,他的数学分析挂科了.于是他只好找数分老师求情. 善良的数分老师答应不挂他,但是要求小 Z 帮助他一起解决一个难题问题是这样的,现在有 n 个标号为 1 ...

最新文章

  1. Deep Learning for 3D Point Clouds: A Survey 论文阅读
  2. The genome polishing tool POLCA makes fast and accurate corrections in genome assemblies
  3. linux命令管理GPT分区,Linux磁盘管理GPT分区教程
  4. Mozilla宣布关闭 Persona
  5. 使用 Flask-apidoc 自动生成 Api 文档
  6. 从工作中清除代码–使用JUnit 5,Mockito和AssertJ编写可执行规范
  7. catia直线测距怎么调出来_CATIA怎么测量两线夹角.
  8. 修改am335x 制作android sd启动卡的bug
  9. 一统江湖的大前端(5)editorconfig + eslint——你的代码里藏着你的优雅
  10. FTP 编写 2:客户端与服务端的连接
  11. 线程创建 pthread_create 中自定义参数注意事项
  12. android访问setting权限,如何获得我的Android应用程序的可怕WRITE_SECURE_SETTINGS权限?...
  13. 微信蓝牙协议二:1800 or 18914E结尾和Varint压缩算法
  14. 查看文章strncpy()功能更好的文章
  15. 如何在Linux系统列出systemd下所有正在运行的服务
  16. K8s 使用helm 安装 EFK和ELK分布式日志分析系统系列(es版本:6.7.0;)
  17. SQL注入 时间延时注入语句
  18. 如何在ppt中生成柱状图_PPT幻灯片中怎么插入柱形图数据图表?
  19. 螺旋城的灾难完全攻略及地图
  20. 程序员毕业五年他年薪百万,他月薪一万

热门文章

  1. java zero copy 实现,关于Zero Copy
  2. php CURL 发送请求详解
  3. Java中的Unsafe在安全领域的一些应用总结和复现
  4. Linux 驱动开发之内核模块开发 (三)—— 模块传参
  5. C/C++经典面试题
  6. [Redux/Mobx] 你有使用过redux-saga中间件吗?它是干什么的?
  7. [react] React中验证props的目的是什么?
  8. javascript学习系列(6):数组中的pop等方法
  9. 前端学习(2977):vue-element-admin
  10. 与歌谣通关前端面试题【CSS篇汇总目录】