题意与分析

题意是这样的,问你把一个长方形从一个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)的更多相关文章

  1. 「日常训练」Watering Flowers(Codeforces Round #340 Div.2 C)

    题意与分析 (CodeForces 617C) 题意是这样的:一个花圃中有若干花和两个喷泉,你可以调节水的压力使得两个喷泉各自分别以\(r_1\)和\(r_2\)为最远距离向外喷水.你需要调整\(r_ ...

  2. 「日常训练」Alternative Thinking(Codeforces Round #334 Div.2 C)

    题意与分析 (CodeForces - 603A) 这题真的做的我头疼的不得了,各种构造样例去分析性质... 题意是这样的:给出01字符串.可以在这个字符串中选择一个起点和一个终点使得这个连续区间内所 ...

  3. 「日常训练」More Cowbell(Codeforces Round #334 Div.2 B)

    题意与分析(CodeForces 604B) 题意是这样的:\(n\)个数字,\(k\)个盒子,把\(n\)个数放入\(k\)个盒子中,每个盒子最多只能放两个数字,问盒子容量的最小值是多少(水题) 不 ...

  4. 「日常训练」Ice Cave(Codeforces Round 301 Div.2 C)

    题意与分析(CodeForces 540C) 这题坑惨了我....我和一道经典的bfs题混淆了,这题比那题简单. 那题大概是这样的,一个冰塔,第一次踩某块会碎,第二次踩碎的会掉落.然后求可行解. 但是 ...

  5. 「日常训练」School Marks(Codeforces Round 301 Div.2 B)

    题意与分析(CodeForces 540B) 题意大概是这样的,有一个考试鬼才能够随心所欲的控制自己的考试分数,但是有两个限制,第一总分不能超过一个数,不然就会被班里学生群嘲:第二分数的中位数(科目数 ...

  6. 「日常训练」The Intriguing Obsession(CodeForces Round #439 Div.2 C)

    2018年11月30日更新,补充了一些思考. 题意(CodeForces 869C) 三堆点,每堆一种颜色:连接的要求是同色不能相邻或距离必须至少3.问对整个图有几种连接方法,对一个数取模. 解析 要 ...

  7. 「日常训练」Regular Bridge(Codeforces Round 306 Div.2 D)

    题意与分析 图论基础+思维题. 代码 #include <bits/stdc++.h> #define MP make_pair #define PB emplace_back #defi ...

  8. 「日常训练」Two Substrings(Codeforces Round 306 Div.2 A)

    题意与分析 一道非常坑的水题.分析醒了补. 代码 #include <bits/stdc++.h> #define MP make_pair #define PB emplace_back ...

  9. 「日常训练」ZgukistringZ(Codeforces Round #307 Div. 2 B)

    题意与分析(CodeForces 551B) 这他妈哪里是日常训练,这是日常弟中弟. 题意是这样的,给出一个字符串A,再给出两个字符串B,C,求A中任意量字符交换后(不限制次数)能够得到的使B,C作为 ...

  10. Greg and Array CodeForces 296C 差分数组

    Greg and Array CodeForces 296C 差分数组 题意 是说有n个数,m种操作,这m种操作就是让一段区间内的数增加或则减少,然后有k种控制,这k种控制是说让m种操作中的一段区域内 ...

随机推荐

  1. idea+maven+spring+cxf创建webservice应用(二)生成客户端程序

    idea+maven+spring+cxf创建webservice应用(二)生成客户端程序,以上一篇为基础"idea+maven+spring+cxf创建webservice应用" ...

  2. 如何修改PPT中左下方状态栏的主题名称

    网上有很多很好的PPT,可惜一般作者都加了名字和主题,现在我们就来说说如何修改PPT中左下方状态栏的主题名称. 如下图所示,红色方框内就是别人设置的主题. 网上很多网友都说:点击"视图&qu ...

  3. JDK/bin目录下的不同exe文件的用途

    新安装完JDk 大家是否发现安装目录的bin文件夹有很多exe文件 下面就为大家讲解不同exe文件的用途 javac:Java编译器,将Java源代码换成字节代 java:Java解释器,直接从类文件 ...

  4. vue项目用nodejs实现模拟数据方法

    1)在项目根目录(如demo)中创建一个文件夹,如base,将项目中所有的前端文件全部放到base文件夹中,此时项目demo下只有一个文件夹base 2)通过cmd进入命令窗口,直接执行npm ins ...

  5. 20165318 2017-2018-2 《Java程序设计》第六周学习总结

    20165318 2017-2018-2 <Java程序设计>第六周学习总结 教材内容学习总结 第八章 常用实用类 1.String类 String类用来处理字符序列,在java.lang ...

  6. 随手练——HDU 5015 矩阵快速幂

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5015 看到这个限时,我就知道这题不简单~~矩阵快速幂,找递推关系 我们假设第一列为: 23 a1 a2 ...

  7. zoc license code

    点击导航栏上的zoc-about zoc,然后: 点击enter license: 然后输入内容即可: part A:  51698/01027/34713 part B:  00937 还有很多其他 ...

  8. ddt 接口示范以及报告生成html案例

    1.数据构造获取我就不写了直接以test_data=[  ] 构造一个简单数据建模.实际你从哪里获取根据情况excel也好yaml也罢 2.用例套件处理,报告生成处理 import ddtimport ...

  9. 以代码爱好者角度来看AMD与CMD(转)

    随着浏览器功能越来越完善,前端已经不仅仅是切图做网站,前端在某些方面已经媲美桌面应用.越来越庞大的前端项目,越来越复杂的代码,前端开发者们对于模块化的需求空前强烈.后来node出现了,跟随node出现 ...

  10. 网络编程中的read,write函数

    关于TCP/IP协议,建议参考Richard Stevens的<TCP/IP Illustrated,vol1>(TCP/IP详解卷1). 关于第二层面,依然建议Richard Steve ...