jzoj4640. 【GDOI2017模拟7.15】妖怪
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<aj且yi<yj(答案)a_i<a_j且y_i<y_j(答案)ai<aj且yi<yj(答案)
那么
ai+bi+ai∗x+bix<aj+bj+aj∗x+bjxa_i+b_i+a_i*x+\frac{b_i}{x}<a_j+b_j+a_j*x+\frac{b_j}{x}ai+bi+ai∗x+xbi<aj+bj+aj∗x+xbj
化一波式子得到:
x>bi−bjaj−aix>\frac{b_i-b_j}{a_j-a_i}x>aj−aibi−bj
设c[i,j]=bi−bjaj−aic[i,j]=\frac{b_i-b_j}{a_j-a_i}c[i,j]=aj−aibi−bj
则我们对于一个c[i,j]>c[j,k]c[i,j]>c[j,k]c[i,j]>c[j,k]那么j这个点就是没有用的。
所以说,我们就得到一个序列ddd,序列满足c[di−1,di]<c[di,di+1]c[d_{i-1},d_i]<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】妖怪相关推荐
- 【折半搜索-经典题目】中山纪念中学暑期游Day13——【GDOI2017模拟8.15】Buy
前言 考试时有道题目用到了[折半搜索] 老师推荐了这道经典题目让大家练习[前后部分算法不同]的题目 虽然不知道我有没有时间做,好歹先把题目记录一下,免得以后找不到了qwq 题目 Input Outpu ...
- [双指针|模拟] leetcode 15 三数之和
[双指针|模拟] leetcode 15 三数之和 1.题目 题目链接 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ? ...
- jzoj 5906. 【NOIP2018模拟10.15】传送门(树形dp)
5906. [NOIP2018模拟10.15]传送门 Description 8102年,Normalgod在GLaDOS的帮助下,研制出了传送枪.但GLaDOS想把传送枪据为己有,于是把Normal ...
- 2020.03.11模拟赛15(第一题)
1.水果盛宴(fruit) 题目描述 贝茜又再一次地闯入了 Farmer John 的房子!她在厨房发现了一堆柠檬和一堆橘子(每堆都有无限多个),并且,她希望尽可能地多吃. 贝茜的有一个饱腹值上限 T ...
- jzoj5904. 【NOIP2018模拟10.15】刺客信条(并查集)
5904. [NOIP2018模拟10.15]刺客信条 Description 故事发生在1486 年的意大利,Ezio 原本只是一个文艺复兴时期的贵族,后来因为家族成员受到圣殿骑士的杀害,决心成为一 ...
- 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 ...
- JZOJ 3775. 【NOIP2014模拟8.15】因子的排列
Description 一天,小B学习了分解质因数的相关内容.他发现,一个数的质因子可以有许多不同的排列方式,例如20=2*2*5=2*5*2=5*2*2,那么小B认为20的质因子有3种不同的排列方式 ...
- NOIP模拟测试15「建造城市city(插板法)·轰炸·石头剪刀布」
建造城市 题解 先思考一个简单问题 10个$toot$ 放进5间房屋,每个房屋至少有1个$toot$,方案数 思考:插板法,$10$个$toot$有$9$个缝隙,$5$间房屋转化为$4$个挡板,放在t ...
- jzoj3771. 【NOI2015模拟8.15】小 Z 的烦恼
Description 小 Z 最近遇上了大麻烦,他的数学分析挂科了.于是他只好找数分老师求情. 善良的数分老师答应不挂他,但是要求小 Z 帮助他一起解决一个难题问题是这样的,现在有 n 个标号为 1 ...
最新文章
- Deep Learning for 3D Point Clouds: A Survey 论文阅读
- The genome polishing tool POLCA makes fast and accurate corrections in genome assemblies
- linux命令管理GPT分区,Linux磁盘管理GPT分区教程
- Mozilla宣布关闭 Persona
- 使用 Flask-apidoc 自动生成 Api 文档
- 从工作中清除代码–使用JUnit 5,Mockito和AssertJ编写可执行规范
- catia直线测距怎么调出来_CATIA怎么测量两线夹角.
- 修改am335x 制作android sd启动卡的bug
- 一统江湖的大前端(5)editorconfig + eslint——你的代码里藏着你的优雅
- FTP 编写 2:客户端与服务端的连接
- 线程创建 pthread_create 中自定义参数注意事项
- android访问setting权限,如何获得我的Android应用程序的可怕WRITE_SECURE_SETTINGS权限?...
- 微信蓝牙协议二:1800 or 18914E结尾和Varint压缩算法
- 查看文章strncpy()功能更好的文章
- 如何在Linux系统列出systemd下所有正在运行的服务
- K8s 使用helm 安装 EFK和ELK分布式日志分析系统系列(es版本:6.7.0;)
- SQL注入 时间延时注入语句
- 如何在ppt中生成柱状图_PPT幻灯片中怎么插入柱形图数据图表?
- 螺旋城的灾难完全攻略及地图
- 程序员毕业五年他年薪百万,他月薪一万
热门文章
- java zero copy 实现,关于Zero Copy
- php CURL 发送请求详解
- Java中的Unsafe在安全领域的一些应用总结和复现
- Linux 驱动开发之内核模块开发 (三)—— 模块传参
- C/C++经典面试题
- [Redux/Mobx] 你有使用过redux-saga中间件吗?它是干什么的?
- [react] React中验证props的目的是什么?
- javascript学习系列(6):数组中的pop等方法
- 前端学习(2977):vue-element-admin
- 与歌谣通关前端面试题【CSS篇汇总目录】