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. 我们为什么需要操作系统(Operating System)?

    我们为什么需要操作系统(Operating System)? a) 从计算机体系的角度,OS向下统筹了所有硬件资源(1),向上为所有软件提供API调用(2),使得软件程序员不必知晓硬件的具体细节,实现 ...

  2. 力扣181(MySQL)- 超过经理收入的员工(简单)

    题目: 表:Employee 编写一个SQL查询来查找收入比经理高的员工. 以 任意顺序 返回结果表. 查询结果格式如下所示. 示例 1:  解题思路: 一.[子查询] 先通过子查询找到当前员工的经理 ...

  3. 力扣263(java)-丑数(简单)

    题目: 丑数 就是只包含质因数 2.3 和 5 的正整数. 给你一个整数 n ,请你判断 n 是否为 丑数 .如果是,返回 true :否则,返回 false . 示例 1: 输入:n = 6输出:t ...

  4. eBPF技术应用云原生网络实践系列之基于socket的service | 龙蜥技术

    ​简介:如何使用 socket eBPF进一步提升Service 网络的转发性能? ​ 背景介绍 Kubernetes 中的网络功能,主要包括 POD 网络,service 网络和网络策略组成.其中 ...

  5. 更灵活的边缘云原生运维:OpenYurt 单元化部署新增 Patch 特性

    简介: 在正文开始之前,我们先回顾一下单元化部署的概念和设计理念.在边缘计算场景下,计算节点具有很明显的地域分布属性,相同的应用可能需要部署在不同地域下的计算节点上. 作者 | 张杰(冰羽)来源 |  ...

  6. dotnet 警惕 Task 的 ContinueWith 带上 OnlyOnFaulted 参数抛出取消异常

    本文记录 dotnet 的一个令人迷惑的设计,在 Task 里,有一个叫 ContinueWith 的方法,此方法可以在 Task 完成时执行传入的委托.在 ContinueWith 方法里面,还有一 ...

  7. 从改一个老项目开始的PHP踩坑记

    php所有版本的地址: https://windows.php.net/downloads/releases/archives/ 访问控制器时省略了index.php报No input file sp ...

  8. kafka connect gui 可视化管理工具

    kafka connect gui 可视化管理工具 官网地址:http://www.redisant.cn/ka 连接到 Kafka Connect 支持各种认证方式,支持 SSL/TLS 安全连接 ...

  9. Linux内核之I2C协议

    I2C协议标准文档 THE I2C-BUS SPECIFICATION VERSION 2.1 JANUARY 2000: https://www.csd.uoc.gr/~hy428/reading/ ...

  10. Pinely Round 3 (Div. 1 + Div. 2)

    A 构造题,分两种情况考虑 上下都行,左右选一个 左右都行,上下选一个 void solve() { int n; cin >> n; vector<pair<int, int ...