Codeforces Round #514 (Div. 2) D. Nature Reserve
http://codeforces.com/contest/1059/problem/D
最大值:
最左下方和最右下方分别有一个点
r^2 - (r-1)^2 = (10^7)^2
maxr<0.5*10^14
Way1:
二分。
difference:
如果使用 5*10^13 -> 10^-6,2^ 60~70区间,pow,sqrt运算,实测超时。
实际上是,使用
。
time of a case:->
Code:
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+; double x[maxn],y[maxn];
double z=5.0*1e13;
int n; bool work(double m)
{
double p,q,d;
int i;
p=-z; q=z;
for (i=;i<=n;i++)
{
d=sqrt(pow(m,)-pow(m-y[i],));
p=max(p,x[i]-d);
q=min(q,x[i]+d);
// if (p>q)
// return 0;
}
// return 1;
if (p<=q)
return ;
else
return ;
} int main()
{
double l=,r,m;
int v,i;
scanf("%d",&n);
v=;
for (i=;i<=n;i++)
{
scanf("%lf%lf",&x[i],&y[i]);
if (y[i]!=)
{
if (v==)
v=(y[i]>);
else if (v!=(y[i]>))
{
printf("-1");
return ;
}
}
y[i]=fabs(y[i]);
l=max(l,y[i]/);
}
r=z;
while ((r-l)/max(1.0,l)>1e-)
{
m=(l+r)/;
if (work(m))
r=m;
else
l=m;
}
printf("%.10f",r);
return ;
}
Way2:
多个二次函数f1,f2,…,fn,ax^2+bx+c (a>0)
f(x)=max(f1(x),f2(x),…,fn(x)),
而f是先减小,后增大,使用三分法
证明:
设f(x)是由多个连续的二次函数片段组成,相邻的二次函数片段的斜率逐渐增大,而每个二次函数片段都是f''>0,所以当前f''>0
设加入新的函数后,变化的区间为
1.[d1,d2],新的函数的片段替代原来的部分,满足f'‘’>0,且新的函数的片段往d1外,点外延伸,比原来的数值小,满足f'(d1-delta)<f'(d1+delta),f'(d2-delta)<f'(d2+delta)
2.(-inf,d1],[d1,inf)同理。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define minv 1e-6
#define inf 1e9
#define pi 3.1415926536
#define nl 2.7182818284
const ll mod=1e9+;//
const int maxn=1e5+; int a[maxn],b[maxn],x[maxn],y[maxn],n;
double u[maxn],v[maxn],w[maxn]; double f(double m)
{
double mm,z=;
int i;
mm=m*m;
for (i=;i<=n;i++)
z=max(z,u[i]*mm+v[i]*m+w[i]);
return z;
} int main()
{
int cond=,i;
double l,r,m,mm,a,b;
scanf("%d",&n);
for (i=;i<=n;i++)
{
scanf("%d%d",&x[i],&y[i]);
if (y[i]!=)
{
if (cond==)
cond=(y[i]>);
else if (cond!=(y[i]>))
{
printf("-1");
return ;
}
}
y[i]=abs(y[i]);
u[i]=0.5/y[i];
v[i]=-1.0*x[i]/y[i];
w[i]=(1.0*x[i]*x[i]+1.0*y[i]*y[i])//y[i];
}
l=-1.0e7,r=1.0e7;
while ()
{
m=(l+r)/;
mm=(m+r)/;
a=f(m);
b=f(mm);
if (fabs(a-b)/max(1.0,min(a,b))<1e-)
break;
if (f(mm)>f(m))
r=mm;
else
l=m;
}
printf("%.10f",a);
return ;
}
类似:
hdu4717 The Moving Points
Codeforces Round #514 (Div. 2) D. Nature Reserve的更多相关文章
- Codeforces Round #514 (Div. 2):D. Nature Reserve(二分+数学)
D. Nature Reserve 题目链接:https://codeforces.com/contest/1059/problem/D 题意: 在二维坐标平面上给出n个数的点,现在要求一个圆,能够容 ...
- Codeforces Round #514 (Div. 2)
目录 Codeforces 1059 A.Cashier B.Forgery C.Sequence Transformation D.Nature Reserve(二分) E.Split the Tr ...
- Codeforces Round #514 (Div. 2) E. Split the Tree(倍增+贪心)
https://codeforces.com/contest/1059/problem/E 题意 给出一棵树,每个点都有一个权值,要求你找出最少条链,保证每个点都属于一条链,而且每条链不超过L个点 和 ...
- Codeforces Round #514 (Div. 2) C. Sequence Transformation(递归)
C. Sequence Transformation 题目链接:https://codeforces.com/contest/1059/problem/C 题意: 现在有1~n共n个数,然后执行下面操 ...
- Codeforces Round #514 (Div. 2) C. Sequence Transformation 思维构造
题意 给出一个1-n的集合 gcd 集合里面的所有数 得到的 一个 数 然后自己选择删去一个数 要使得到的数 构成的数列 的字典序最大 思路: gcd所有数 那gcd得到的数肯定要小于数 ...
- Codeforces Round #514 (Div. 2) B - Forgery
这个题我一开始没思路,最后也没思路 2个小时一直没思路 本来还想解释题意的,写了半天发现解释的不是很清楚,你还是google翻译一下吧 这个题解法是这样的: 首先,给你图案里面有很多的点,每个点的周围 ...
- Codeforces Round #514 (Div. 2) C. Sequence Transformation
题目大意:给你一个n 从1,2,3......n这个序列中 依次进行以下操作:1 .求所有数的最大公因数,放入a序列里面 2 .任意删去一个元素 一直到序列为空 根据删除元素的不同,导致序列a的字典序 ...
- Codeforces Round#514 Div.2 翻车记
A:签到 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
随机推荐
- linux上启动tomcat远程不能访问
linux上关闭防火墙同样访问不了,执行iptables -f即可. 你试一试这个“iptables -F”然后再访问,如果能够访问了,那么需要执行“firewall-cmd --add-port=8 ...
- 基本的排序算法C++实现(插入排序,选择排序,冒泡排序,归并排序,快速排序,最大堆排序,希尔排序)
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/8529525.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- Coolest Ski Route-不定起点和终点----在有向变的情况下---求最长路
这题最开始给你了N个点,M条边,边是单向边,问不指定起点和终点,最长路是什么??? 脑补一下,不定起点和终点的最短路,用弗洛伊德算法搞一搞,但是...那个垃圾算法的复杂度是N^3的,但是这个算法的M高 ...
- html转js字符串拼接
https://www.bejson.com/convert/html_js/ html转js字符串拼接
- QQ使用的使用评价
1:界面以及功能:打开软件之后探出登录窗口,基本功能的登录,找回密码,注册帐号等功能均在比较醒目的位置,界面较为友好. 将注册帐号放在打开软件的第一界面当然是正确的选择,给予用户非常直观的提示(没有帐 ...
- 在Java中执行Tomcat中startup.bat
问题:更改数据库时,需要重启Tomcat服务器,才能把更改后的数据加载到项目中.于是想每次更改数据库时,都调用Java方法,重启Tomcat 代码: Process process = Runtime ...
- Oracle系列(一): Oracle数据恢复
Oracle数据恢复 在使用Oracle的时候,突然一部小心update或者delete全部数据后怎么办? select * from table as of timestamp to_timest ...
- “数学口袋精灵”App的第三个Sprint计划(总结与团队感悟)----开发日记
第三阶段Sprint完成情况: 我们的"数学口袋精灵"App已经完成了,该app能随机产生多种形式的算式,比如带括号的,分数四则运算,混合运算,阶乘等,通过游戏形式让用户乐在其中. ...
- 战神答题APP 无敌结束版
APP发布了哦~~ 多多捧场~ http://anzhuoyuan.com/app/info/appid/242381.html 还有github https://github.com/784 ...
- Server Tomcat v7.0 Server at libra failed to start
https://stackoverflow.com/questions/13244233/server-tomcat-v7-0-server-at-localhost-failed-to-start- ...