【日常训练】 Help Greg the Dwarf(CodeForces-99E)
题意与分析
题意是这样的,问你把一个长方形从一个L型街道的一端移动到另一端,固定了该长方形的长,求他的最大宽。
这种问题我是第一次独立解决(以前都是抱队友大腿QAQ),现在没法子只好自己硬着头皮做,看了题解。
不失一般性,保证\(a\le b\)。那么l要么比两个小,要么在一个中间,要么比他们都大。比两个小,那宽是最大值,也就是长了;在两个中间,那么宽直接取a就可以了(因为你要进去,如果a比b小你取大了也白给)。
最有意思的是第三种情况。我插一幅图说明一下:

宽度是一定的,问题就在于我们的\(l\)。把\(l\)像示意图那样靠在最左边,那么我们要求的就是\((b,a)\)到这条直线的距离的最大值,它是一个关于斜率,也就是底下横坐标\(x_0\)的函数。如果你数学能力比较强悍的话,可以直接试试解这个方程看看。问题在于我们是竞赛,没那么多时间,可以这么考虑:这个直线的摆动是对称的,因此如果有最大值,一定是在中间的——也就是经历一个增加到最大再减小的过程。这样一来就可以用三分算法来解决问题了。注意一下不存在的情况(如果最后算出来的结果是负数或者很小这种)。
这正好是我第一次写三分算法,很有价值的一题。
代码
/*
* ACM Code => cf99e.java
* Written by Sam X
* Date: 三月, 20, 2019
* Time: 14:25
*/
import java.util.*;
import java.math.*;
public class cf99e
{
static double a,b,l;
static final double eps=1e-9;
static final int sgn(double x)
{
if(Math.abs(x)<eps) return 0;
else if(x>eps) return 1;
else return -1;
}
static final double calc(double x)
{
return (Math.sqrt(l*l-x*x)*(b-x)+x*a)/l;
}
static void ternarySearch(double l, double r)
{
double midl, midr;
while(l+eps<r)
{
midl=l+(r-l)/3;
midr=r-(r-l)/3;
//System.out.println(mid+" "+midmid);
//System.out.println(calc(mid)+" "+calc(midmid));
if(Math.abs(calc(midl))<Math.abs(calc(midr))) // ask for maximum
{
r=midr;
}
else l=midl;
}
if(sgn(calc(l))<1)
System.out.println("My poor head =(");
else System.out.println(calc(l));
}
public static void main(String args[])
{
Scanner cin = new Scanner(System.in);
a=cin.nextDouble();
b=cin.nextDouble();
l=cin.nextDouble();
if(a-b>eps)
{
double t=a;
a=b;
b=t;
}
double minab = Math.min(a,b),
maxab = Math.max(a,b);
if(sgn(l-minab)<1) System.out.printf("%.7f\n", l);
else if(sgn(minab-l)<1 && sgn(l-maxab)<1) System.out.printf("%.7f\n", a);
else
{
ternarySearch(0, l);
}
cin.close();
}
}
【日常训练】 Help Greg the Dwarf(CodeForces-99E)的更多相关文章
- 「日常训练」Watering Flowers(Codeforces Round #340 Div.2 C)
题意与分析 (CodeForces 617C) 题意是这样的:一个花圃中有若干花和两个喷泉,你可以调节水的压力使得两个喷泉各自分别以\(r_1\)和\(r_2\)为最远距离向外喷水.你需要调整\(r_ ...
- 「日常训练」Alternative Thinking(Codeforces Round #334 Div.2 C)
题意与分析 (CodeForces - 603A) 这题真的做的我头疼的不得了,各种构造样例去分析性质... 题意是这样的:给出01字符串.可以在这个字符串中选择一个起点和一个终点使得这个连续区间内所 ...
- 「日常训练」More Cowbell(Codeforces Round #334 Div.2 B)
题意与分析(CodeForces 604B) 题意是这样的:\(n\)个数字,\(k\)个盒子,把\(n\)个数放入\(k\)个盒子中,每个盒子最多只能放两个数字,问盒子容量的最小值是多少(水题) 不 ...
- 「日常训练」Ice Cave(Codeforces Round 301 Div.2 C)
题意与分析(CodeForces 540C) 这题坑惨了我....我和一道经典的bfs题混淆了,这题比那题简单. 那题大概是这样的,一个冰塔,第一次踩某块会碎,第二次踩碎的会掉落.然后求可行解. 但是 ...
- 「日常训练」School Marks(Codeforces Round 301 Div.2 B)
题意与分析(CodeForces 540B) 题意大概是这样的,有一个考试鬼才能够随心所欲的控制自己的考试分数,但是有两个限制,第一总分不能超过一个数,不然就会被班里学生群嘲:第二分数的中位数(科目数 ...
- 「日常训练」The Intriguing Obsession(CodeForces Round #439 Div.2 C)
2018年11月30日更新,补充了一些思考. 题意(CodeForces 869C) 三堆点,每堆一种颜色:连接的要求是同色不能相邻或距离必须至少3.问对整个图有几种连接方法,对一个数取模. 解析 要 ...
- 「日常训练」Regular Bridge(Codeforces Round 306 Div.2 D)
题意与分析 图论基础+思维题. 代码 #include <bits/stdc++.h> #define MP make_pair #define PB emplace_back #defi ...
- 「日常训练」Two Substrings(Codeforces Round 306 Div.2 A)
题意与分析 一道非常坑的水题.分析醒了补. 代码 #include <bits/stdc++.h> #define MP make_pair #define PB emplace_back ...
- 「日常训练」ZgukistringZ(Codeforces Round #307 Div. 2 B)
题意与分析(CodeForces 551B) 这他妈哪里是日常训练,这是日常弟中弟. 题意是这样的,给出一个字符串A,再给出两个字符串B,C,求A中任意量字符交换后(不限制次数)能够得到的使B,C作为 ...
- Greg and Array CodeForces 296C 差分数组
Greg and Array CodeForces 296C 差分数组 题意 是说有n个数,m种操作,这m种操作就是让一段区间内的数增加或则减少,然后有k种控制,这k种控制是说让m种操作中的一段区域内 ...
随机推荐
- hibernate连接mysql,查询条件中有中文时,查询结果没有记录,而数据库有符合条件的记录(解决方法)
今天在另一台服务器上重新部署了网站,结果出现了以下问题: ——用hibernate做mysql的数据库连接时,当查询条件中有中文的时候,查询结果没有记录,而数据库中是存在符合条件的记录的. 测试了以下 ...
- [转]Hadoop 读写数据流
Hadoop文件读取 1)客户端通过调用FileSystem对象中的open()函数来读取它做需要的数据.FileSystem是HDFS中DistributedFileSystem的一个实例. 2)D ...
- 智能指针shared_ptr新特性shared_from_this及weak_ptr
enable_shared_from_this是一个模板类,定义于头文件<memory>,其原型为: template< class T > class enable_shar ...
- 【洛谷】【堆】P1801 黑匣子_NOI导刊2010提高(06)
[题目描述:] Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个Black Box要处理一串命令. 命令只有两 ...
- TensorFlow函数(八)tf.control_dependencies()
tf.control_dependencies(control_inputs) 此函数指定某些操作执行的依赖关系 返回一个控制依赖的上下文管理器,使用 with 关键字可以让在这个上下文环境中的操作都 ...
- Opencv——摄像头设置
VideoCapture capture(0);/*设置摄像头参数 不要随意修改capture.set(CV_CAP_PROP_FRAME_WIDTH, 1080);//宽度 capture.set( ...
- dede:arclist调用文章正文全部内容
dede:arclist调用文章正文全部内容 {dede:arclist row='20'} <div class="aboutbox"> <h4>[fie ...
- 最新Flume1.7 自定义 MongodbSink 结合TAILDIR Sources的使用
Flume MongodbSink 此mongodb支持3.0 github地址 MongodbSink flume-ng-mongodbsink An Apache Flume Sink that ...
- nagios client 端的安装配置 以及 svr端对应的配置(转)
1.下载安装包并解压 $ wget wget http://www.nagios-plugins.org/download/nagios-plugins-2.1.1.tar.gz$ wget http ...
- JS数组的赋值
var test=[1,2,3,4,5,6,7]; var arr=test; arr.splice(2,1); alert(test);//1,2,4,5,6,7 JS数组实质上是对象.因此, ...