Problem

open.kattis.com/problems/doors
vjudge.net/contest/183886#problem/B

Reference

点到线段的最短距离算法

Meaning

有两个球 Alex 和 Bob,问 Alex 要能通过障碍碰到 Bob,它最大的半径是多少。

Analysis

o(0,w)a(l,w)d(l - l * cos(A),w + l * sin(A))b(l,0)e(l - l * cos(B),l * sin(B))c(3.0 * l,w)(点c是上面的右边那条射线上的一点),那么会卡住 Alex(限制 Alex 半径)的是:
1. R(原来的大小)
2. l / 2
3. w / 2(因题目保证 l≤wl\leq w,所以这条忽略)
4. 点 o 到线段 ad 的距离
5. 点 e 到线段 ad 的距离
6. 点 a 到线段 be 的剧离
7. 点 e 到线段 ac 的距离
所以是这几个值取最小。

Code

#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
const double EPS = 1e-10;// 浮点数的符号
int sgn(double f)
{if(f < -EPS)return -1;if(f > EPS)return 1;return 0;
}// 点、向量
typedef struct pnt // point
{double x, y;pnt(double _x = 0.0, double _y = 0.0):x(_x), y(_y) {}// 判相等bool operator == (const pnt &rhs) const{return !sgn(x - rhs.x) && !sgn(y - rhs.y);}// 两点相减 -> 得出向量pnt operator - (const pnt &rhs) const{return pnt(x - rhs.x, y - rhs.y);}// 向量点积double operator * (const pnt &rhs) const{return x * rhs.x + y * rhs.y;}// 向量叉积(的模)double operator ^ (const pnt &rhs) const{return x * rhs.y - rhs.x * y;}
} vec; // vector// VECtor LENgth -> 向量长
double veclen(const vec &v)
{return sqrt(v * v);
}// Point to Segment -> 点 p 到线段 ab 距离
double ps(const pnt &p, const pnt &a, const pnt &b)
{if(a == b)return veclen(p - a);vec ab = b - a, ap = p - a, bp = p - b;// 垂足在 a 点左边if(sgn(ab * ap) < 0)return veclen(ap);// 垂足在 b 点右边if(sgn(ab * bp) > 0)return veclen(bp);// 垂足在 ab 上return fabs(ab ^ ap) / veclen(ab);
}int main()
{double R, l, w;int T;scanf("%lf%lf%lf%d", &R, &l, &w, &T);while(T--){double A, B;scanf("%lf%lf", &A, &B);pnt o(0.0, w), a(l, w), ua(l - l * cos(A), w + l * sin(A)),c(l * 3.0, w), b(l, 0.0), ub(l - l * cos(B), l * sin(B));double r = min(R, l / 2.0); // l <= wr = min(r, ps(o, a, ua) / 2.0);r = min(r, ps(ub, a, ua) / 2.0);r = min(r, ps(ub, a, c) / 2.0);r = min(r, ps(a, b, ub) / 2.0);printf("%.9f\n", r);}return 0;
}

Kattis Doors相关推荐

  1. IBM Rational DOORS通过DXL进行二次开发初试(2)

    2019独角兽企业重金招聘Python工程师标准>>> 1.如果是在Module模块菜单添加功能只需要在:C:\Program Files(x86)\IBM\Rational\DOO ...

  2. 剑桥少儿英语预备级教案(上) unit8 How many doors?

    1使学生进一步熟悉1`5的数字 2 使学生学会6~10的数字 3 使学生加深对单`复数的概念 4 使学生能模仿发出字母及所给单词的读音 5 使学生能读出第7部分所给出的句子 交际句型: How man ...

  3. 卓越管理的秘密(Behind Closed Doors)

    或许提到本书甚至本书的作者Johanna Rothman我们会感到些许陌生,那么提起她的另一本获得素有软件界奥斯卡之称的Jolt生产效率大奖的名著<项目管理修炼之道>,会不会惊讶的发现,原 ...

  4. Kattis - icpccamp ICPC Camp(二分+贪心)

    题目链接:点击查看 题目大意:给出两种种类的数字分别 m1m_1m1​ 和 m2m_2m2​ 个,现在要求匹配 nnn 个不同种类的数字,每个数字只能使用一次,且两数之和不能超过 sss,输出任意两对 ...

  5. 【CodeForces - 1102C 】Doors Breaking and Repairing (思维,简单博弈)

    题干: You are policeman and you are playing a game with Slavik. The game is turn-based and each turn c ...

  6. cf----2019-08-14(The Doors,Zoning Restrictions Again,Detective Book)

    总在不经意的年生,回首彼岸,纵然发现光景绵长. Three years have passes and nothing changed. It is still raining in London, ...

  7. Kattis Problem-Unique Snowflakes

    Kattis Problem-Unique Snowflakes 原题链接 题目类型:双指针 题意 给定一个整数序列,找出最长的不重复子串的长度. 分析 使用双指针,枚举每个指针 I,然后每次判断指针 ...

  8. 比DOORS好用的需求管理系统有哪些?对比10大需求管理工具

    本文我们主要盘点在不同项目情况下使用比较广泛的10大需求管理工具:1.Excel:2.在线文档:3.PingCode:4.Worktile:5.Doors:6.jira:7.Polarion:8.JA ...

  9. 好用的需求文档管理工具Telelogic DOORS

    Telelogic DOORS 是需求文档管理市场上的领先工具.使用DOORS,用户可以编辑.跟踪和管理项目中建立起来的所有需求,以保证最终产品符合所有定义的客户需求. 变更和配置管理. Telelo ...

  10. CSL分苹果 小埋与扫雷 Doors Breaking and Repairing Key Set Balanced Ternary String

    第一题CSL分苹果 思路:基础动态规划,设m为所有苹果的数量和,dp[x]为,容量为x时候能分的最多苹果数目,那么wavator分到的最多苹果数目就是dp[m/2],tokitsukaze分到的苹果数 ...

最新文章

  1. 【ZZ】IPv4与IPv6
  2. java doubke类型转换为String_Java基础知识面试题大集合
  3. [知识图谱实战篇] 三.Python提取JSON数据、HTML+D3构建基本可视化布局
  4. 开始Go开发之旅-Golang架构师之路系列实战
  5. java 关闭 tomcat,每次关闭TOMCAT就报错 不知道什么?该如何处理
  6. mysql连接多个存储存储_Mysql(三):多表查询和存储程序
  7. 排序算法 -- 待增加
  8. 三目运算符的空指针问题
  9. python+tkinter使用canvas不显示图片的问题
  10. git本地给远程仓库创建分支
  11. 排列组合计算问题中的卡塔兰数(Catalan Number)
  12. pythonocc_链轮
  13. linux使用dwc串口,linux自带usb gadget设备驱动应用
  14. 黑马程序员_银行业务调度系统
  15. 解决Python无法找到入口——无法定位到程序输入点
  16. Swift Extention
  17. HDU3713 Double Maze(BFS)
  18. PHP生成PDF-TCPDF
  19. NLP | textCNN textRNN 图文详解及代码
  20. 命令行模式:MySQL服务端的登录和退出

热门文章

  1. Opencv学习——LSD直线检测
  2. win10下装win7双系统_win 7 xp双系统的安装(或者win10) 教程
  3. 金融数字化平台建设的三大误区和破局之道
  4. 单片机Fault故障常见应对办法
  5. 非平凡的函数依赖、平凡函数依赖
  6. Unicable技术在卫星接收方案设计中的应用
  7. (三)洞悉linux下的Netfilteramp;iptables:内核中的rule,match和target
  8. Representation Learning with Contrastive Predictive Coding 论文阅读
  9. Codeforces 235C Cyclical Quest(后缀自动机)
  10. 虚拟机搭建web服务器