CF98C Help Greg the Dwarf 题解

为什么不三分?

首先我们考虑如何求出答案。

如图,考虑设夹角为 \(\theta\),那么可以得到表达式:

\[[\cfrac a {\tan \theta} - (l \cos \theta - b)] \sin \theta
\]

整理可得:

\[a \times \cos\theta + b \times \sin\theta - l \times \sin \theta \cos \theta
\]

于是可以考虑观察这个函数的单调性:

明显这是个单峰函数。

考虑合法的大小即是此函数的最小值。

特判掉 \(l \le b\) 或者 \(l \le a\) 的情况:

  • \(l \le b \implies w = \min(a, l)\)

  • \(l \le a \implies w = \min(b, l)\)

所以考虑三分答案求最小即可。

不过需要判断无解的情况!

注意一下 CF 上似乎不能使用 long double……亦或是我写法的问题 QwQ

#include <stdio.h>
#include <math.h>
#define ldb double int a, b, l;
ldb calc(ldb theta) {
ldb c = cos(theta), s = sin(theta);
return a * s - l * c * s + b * c;
} int main() {
scanf("%d %d %d", &a, &b, &l); if (l <= b) {
printf("%.10lf\n", (ldb)(a < l ? a : l));
return 0;
} if (l <= a) {
printf("%.10lf\n", (ldb)(b < l ? b : l));
return 0;
} ldb L = 0, R = acos(-1) / 2;
const ldb eps = 1e-10;
while (L + eps < R) {
ldb ml = (L + L + R) / 3, mr = (L + R + R) / 3;
ldb vl = calc(ml), vr = calc(mr); if (vl < vr) R = mr;
else L = ml;
} ldb ans = calc(L); if (l < ans) ans = l; if (ans < eps) puts("My poor head =(");
else printf("%.10lf\n", ans); return 0;
}

CF98C Help Greg the Dwarf 题解的更多相关文章

  1. 【日常训练】 Help Greg the Dwarf(CodeForces-99E)

    题意与分析 题意是这样的,问你把一个长方形从一个L型街道的一端移动到另一端,固定了该长方形的长,求他的最大宽. 这种问题我是第一次独立解决(以前都是抱队友大腿QAQ),现在没法子只好自己硬着头皮做,看 ...

  2. ACM - 最短路 - CodeForces 295B Greg and Graph

    CodeForces 295B Greg and Graph 题解 \(Floyd\) 算法是一种基于动态规划的算法,以此题为例介绍最短路算法中的 \(Floyd\) 算法. 我们考虑给定一个图,要找 ...

  3. UVa400.Unix ls

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  4. Codeforces Round #179 (Div. 1) A. Greg and Array 离线区间修改

    A. Greg and Array Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/295/pro ...

  5. Codeforces Gym 100269D Dwarf Tower spfa

    Dwarf Tower 题目连接: http://codeforces.com/gym/100269/attachments Description Little Vasya is playing a ...

  6. Codeforces Gym 100269 Dwarf Tower (最短路)

    题目连接: http://codeforces.com/gym/100269/attachments Description Little Vasya is playing a new game na ...

  7. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  8. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  9. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  10. dwarf tower

    dwarf tower(dwarf.cpp/c/pas)[问题描述]Vasya在玩一个叫做"Dwarf Tower"的游戏,这个游戏中有n个不同的物品,它们的编号为1到n.现在Va ...

随机推荐

  1. HarmonyOS NEXT应用开发之使用AKI轻松实现跨语言调用

    介绍 针对JS与C/C++跨语言访问场景,NAPI使用比较繁琐.而AKI提供了极简语法糖使用方式,一行代码完成JS与C/C++的无障碍跨语言互调,使用方便.本示例将介绍使用AKI编写C++跨线程调用J ...

  2. Java编程技巧之单元测试用例编写流程

    简介: 立足于"如何来编写单元测试用例",让大家"有章可循",快速编写出单元测试用例. 作者 | 常意来源 | 阿里技术公众号 温馨提示:本文较长,同学们可收藏 ...

  3. Quick BI:降低使用门槛,大东鞋业8000家门店的数据导航

    简介: 通过引入MaxCompute和Quick BI,大东解决了以往数据查询即刻导致数据库闪崩的状况,还搭建起完善的报表体系,稳定应对高频.高并发的数据分析. 大东鞋业一季大约有500款的新品.大区 ...

  4. EDA 事件驱动架构与 EventBridge 二三事

    ​简介: 事件驱动型架构 (EDA) 方兴未艾,作为一种 Serverless 化的应用概念对云原生架构具有着深远影响.当我们讨论到一个具体架构时,首当其冲的是它的发展是否具有技术先进性.这里从我们熟 ...

  5. 庖丁解牛-图解MySQL 8.0优化器查询解析篇

    ​简介: SQL优化器本质上是一种高度抽象化的数据接口的实现,经过该设计,客户可以使用更通用且易于理解的SQL语言,对数据进行操作和处理,而不需要关注和抽象自己的数据接口,极大地解放了客户的应用程序. ...

  6. dotnet 7 已知问题 WPF 的 TreeView 开启虚拟化之后只显示首项

    本文记录 WPF 在 dotnet 7 的一个已知问题,此问题当前已修复,只需更新 SDK 或运行时即可.使用 TreeView 在开启虚拟化之后只显示首项,其他项不显示.本文将告诉大家此问题的原因和 ...

  7. Jenkins 简述及其搭建

    什么是持续集成? 持续集成(CI)是在软件开发过程中自动化和集成许多团队成员的代码更改和更新的过程.在 CI 中,自动化工具在集成之前确认软件代码是有效且无错误的,这有助于检测错误并加快新版本的发布. ...

  8. fastreport .net打印普通报表

    fastreport .net打印普通报表 前言: .net代码层先不记录在这,后续会单独写一篇博客来记录. 直接在工具上进行功能点的实现 一.效果图 二.功能点 分页 分页小计 金额大写 三.功能点 ...

  9. 07. rails 创建user模型

    rails帮助命令 rails -h 创建user模型 命令行 haima@haima-PC:/media/haima/34E401CC64DD0E28/site/go/src/ruby/circle ...

  10. JS实现跟随鼠标移动的div,和一串跟随鼠标的div,鼠标移入移出实现图片的颜色淡入淡出

    1.一直跟着鼠标移动的div:原理是div的left和top值有oEvent.clientX+scrollLeft鼠标指针向对于浏览器页面(或客户区)的水平坐标+元素中滚动条的水平偏移 <!DO ...