「SCOI2016」妖怪 解题报告
「SCOI2016」妖怪
玄妙...盲猜一个结论,然后过了,事后一证,然后假了,数据真水
首先要最小化
\]
\(k\)是大于0的正实数
最大值显然在上凸包上,先把上凸包搞出来
然后每个点成为最大值时,\(k\)都有个取值范围(就是它左边或者右边的点成为最大值时)
然后对每个点用均值不等式得到最小值为
z&=kx+\frac{1}{k}y+x+y\\
&\ge2\sqrt{xy}+x+y\\
\end{aligned}
\]
在\(kx=\frac{y}{k}\)取到最小值,即\(k=\sqrt{\frac{y}{x}}\)
然后这个点成为最大值时,可能取到最小值的就两个端点和这个最小值点(如果这个最小值可以取的话)
最开始我没注意可以不等式,随便取了个\(k=\frac{y}{x}\),居然也过了,真神奇
Code:
#include <cstdio>
#include <cmath>
#include <algorithm>
using std::min;
const int N=1e6+10;
const double eps=1e-8;
struct Vector
{
double x,y;
Vector(){}
Vector(double X,double Y){x=X,y=Y;}
Vector friend operator -(Vector a,Vector b){return Vector(a.x-b.x,a.y-b.y);}
bool friend operator <(Vector a,Vector b){return fabs(a.x-b.x)<eps?a.y>b.y:a.x<b.x;}
}bee[N],s[N];
double Cross(Vector a,Vector b){return a.x*b.y-a.y*b.x;}
int n,tot;
double get(Vector a,Vector b)
{
double k=(b.y-a.y)/(b.x-a.x);
if(fabs(k)<eps) return -eps;
if(1/fabs(k)<eps) return -1/eps;
return k;
}
double cal(double k,Vector a)
{
if(k<eps) return 1e18;
return (1+k)*a.x+(1+1/k)*a.y;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%lf%lf",&bee[i].x,&bee[i].y);
std::sort(bee+1,bee+1+n);
bee[++n]=Vector(0,bee[1].y);
++n,bee[n]=Vector(bee[n-2].x,0);
std::sort(bee+1,bee+1+n);
for(int i=1;i<=n;i++)
{
while(tot>1&&Cross(bee[i]-s[tot],s[tot]-s[tot-1])<0) --tot;
s[++tot]=bee[i];
}
double ans=1e18;
for(int i=2;i<tot;i++)
{
double kl=-get(s[i],s[i-1]),kr=-get(s[i+1],s[i]),k=sqrt(s[i].x/s[i].y);
ans=min(ans,min(cal(kl,s[i]),cal(kr,s[i])));
if(kl<=k&&k<=kr)
ans=min(ans,cal(k,s[i]));
}
printf("%.4f\n",ans);
return 0;
}
2019.3.5
「SCOI2016」妖怪 解题报告的更多相关文章
- 「SCOI2016」围棋 解题报告
「SCOI2016」围棋 打CF后困不拉基的,搞了一上午... 考虑直接状压棋子,然后发现会t 考虑我们需要上一行的状态本质上是某个位置为末尾是否可以匹配第一行的串 于是状态可以\(2^m\)压住了, ...
- 「SCOI2016」美味 解题报告
「SCOI2016」美味 状态极差无比,一个锤子题目而已 考虑每次对\(b\)和\(d\)求\(c=d \ xor \ (a+b)\)的最大值,因为异或每一位是独立的,所以我们可以尝试按位贪心. 如果 ...
- 「SCOI2016」萌萌哒 解题报告
「SCOI2016」萌萌哒 这思路厉害啊.. 容易发现有个暴力是并查集 然后我想了半天线段树优化无果 然后正解是倍增优化并查集 有这个思路就简单了,就是开一个并查集代表每个开头\(i\)每个长\(2^ ...
- loj#2015. 「SCOI2016」妖怪 凸函数/三分
题目链接 loj#2015. 「SCOI2016」妖怪 题解 对于每一项展开 的到\(atk+\frac{dnf}{b}a + dnf + \frac{atk}{a} b\) 令$T = \frac{ ...
- 「ZJOI2016」旅行者 解题报告
「ZJOI2016」旅行者 对网格图进行分治. 每次从中间选一列,然后枚举每个这一列的格子作为起点跑最短路,进入子矩形时把询问划分一下,有点类似整体二分 至于复杂度么,我不会阿 Code: #incl ...
- 「HNOI2016」树 解题报告
「HNOI2016」树 事毒瘤题... 我一开始以为每次把大树的子树再接给大树,然后死活不知道咋做,心想怕不是个神仙题哦 然后看题解后才发现是把模板树的子树给大树,虽然思维上难度没啥了,但是还是很难写 ...
- 「HNOI2016」序列 解题报告
「HNOI2016」序列 有一些高妙的做法,懒得看 考虑莫队,考虑莫队咋移动区间 然后你在区间内部找一个最小值的位置,假设现在从右边加 最小值左边区间显然可以\(O(1)\),最小值右边的区间是断掉的 ...
- 「HNOI2016」网络 解题报告
「HNOI2016」网络 我有一个绝妙的可持久化树套树思路,可惜的是,它的空间是\(n\log^2 n\)的... 注意到对一个询问,我们可以二分答案 然后统计经过这个点大于当前答案的路径条数,如果这 ...
- 「HAOI2018」染色 解题报告
「HAOI2018」染色 是个套路题.. 考虑容斥 则恰好为\(k\)个颜色恰好为\(c\)次的贡献为 \[ \binom{m}{k}\sum_{i\ge k}(-1)^{i-k}\binom{m-k ...
随机推荐
- semantic-ui 图标
semantic-ui提供了很多的图标,基本常用的在官网上面都能找到.要想记住这么多图标是不可能的,但是也是有简便方法记忆. 首先,图标其实和按钮的区别基本没有,要说有的话,也就是基础样式的大小不同吧 ...
- VMware虚拟机与Windows文件共享
开发中,我们经常的需求是这样的:我想再Windows中进行快捷开发,但是想在linux中运行,那么需要将文件方便在linux中管理,基本可以分成两种方式: 1. 使用网络工具:vmware_tool工 ...
- 上古神器之Vim编辑器
在Linux操作环境下进行文本的编辑少不了编辑器vi ,vim,nona... 一. 修改颜色方案 有时候,使用vim打开一个文件,竟然是蓝色的,辨识度相当的差,这个时候,我们可以调整 一下颜色的搭配 ...
- 3 Asking for more information
1 Could you tell me more about your idea? 2 Could I hear more about your idea? 3 Could you expain yo ...
- Effective C++目录
条款1:视C++为一个语言联邦 条款2:尽量以const.enum.inline替换#define 条款3:尽可能使用const 条款4:确定对象使用前已先被初始化 条款5:了解C++默认编写并调用哪 ...
- 谈谈git/github
先说git/github操作 ->关于git/github操作的好文章已经非常多,如: github使用指南 廖雪峰的git教程 本文的目的在于,积累自己平时相关的操作和想法,记录下来,形成自己 ...
- JDK 环境变量的设置、eclipse、Tomcat的配置
一.JDK的环境变量的设置 环境变量设置: JDK下载好后,(1)选择电脑属性-高级系统设置-高级-环境变量,接着在系统变量中(2)新建JAVA_HOME,变量值设置为下载好后JDK在电脑中的路径;( ...
- python爬虫之短信报警
1 import smtplib import email.mime.multipart import email.mime.text def send_email(content=''): &quo ...
- Nginx简单的负载均衡入门
nginx是用来管理tomcat的,只管理tomcat,并没有管理具体tomcat里面的项目,这里实现了简单的nginx管理两个tomcat的配置,注意upstream节点应该配置到service节点 ...
- Newton方法
Newton方法主要解决无等式约束和等式约束的最优化方法. 1.函数进行二阶泰勒展开近似 Taylor近似函数求导等于0进而得到Newton步径.(搜索方向) 2.Newton减量(停止条件) 当1/ ...