The 2019 ACM-ICPC China Shannxi Provincial Programming Contest C.Angel's Journey

本文主要是介绍The 2019 ACM-ICPC China Shannxi Provincial Programming Contest C.Angel's Journey,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题意:

T(T<=500)组样例,每组样例给出rx,ry,r,x,y(-100<=rx,ry,x,y<=100,0<r<=100)

代表被救的人在(rx,ry-r)位置,且(rx,ry)为圆心有一个半径为r的圆

你从圆外(x,y)出发,题目保证y>ry,

y=ry及这条水平线以下的圆外部分是海,圆内部也是海,都不能经过

问(x,y)到(rx,ry-r)的最短距离

分析:有关切线的问题一定要往三角形上面靠,这样就简单多了。


记A(x,y),O(rx,ry),S(rx,ry-r),D(rx+r,ry),E(rx-r,ry)

过A的直线与圆的切点F,坐标未知

考虑棕色边的三角形AOS,余弦定理求顶角AOS,

余弦定理求直角三角形AFO的角AOF,作差得角FOS

①角FOS小于90度,说明FOS在海里,不可通过直线达,取点E和点D的较近点,再走1/4弧

②角FOS大于90度,FOS可以通过与切点的线段到达,再走圆上一段弧即可

这种判断,省去了对两个切点的分别判断

参考博客:https://blog.csdn.net/code92007/article/details/90582566

代码:

#include<bits/stdc++.h>
using namespace std;
const double pi=acos(-1);
int t,rx,ry,r,x,y;int dis(int x,int y,int i,int j) {return (x-i)*(x-i)+(y-j)*(y-j);
}int main() {while(~scanf("%d",&t)) {while(t--) {scanf("%d%d%d%d%d",&rx,&ry,&r,&x,&y);int d1=dis(rx,ry,x,y),d2=dis(rx,ry-r,x,y);double ag1=acos(1.0*(d1+r*r-d2)/(2.0*r*sqrt(d1)));double ag2=acos(1.0*r/sqrt(d1));double ag3=ag1-ag2;if(ag3<=pi/2) {double s=pi/2*r;if(x>rx) s+=sqrt(dis(x,y,rx+r,ry));else s+=sqrt(dis(x,y,rx-r,ry));printf("%.4f\n",s);}else {printf("%.4f\n",ag3*r+sqrt(d1-r*r));}}}return 0;
}

 

这篇关于The 2019 ACM-ICPC China Shannxi Provincial Programming Contest C.Angel's Journey的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/878075

相关文章

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

Adblock Plus官方规则Easylist China说明与反馈贴(2015.12.15)

-------------------------------特别说明--------------------------------------- 视频广告问题:因Adblock Plus的局限,存在以下现象,优酷、搜狐、17173黑屏并倒数;乐视、爱奇艺播放广告。因为这些视频网站的Flash播放器被植入了检测代码,而Adblock Plus无法修改播放器。 如需同时使用ads

AtCoder Beginner Contest 370 Solution

A void solve() {int a, b;qr(a, b);if(a + b != 1) cout << "Invalid\n";else Yes(a);} B 模拟 void solve() {qr(n);int x = 1;FOR(i, n) FOR(j, i) qr(a[i][j]);FOR(i, n) x = x >= i ? a[x][i]: a[i][x];pr2(

【转载】ACM感悟

今天看了一篇我们学校前辈的ACM的感悟,觉得写的十分有道理,这里转载,文章还会不断的改进和更新。 原文链接:http://www.cnblogs.com/Chierush/p/3760870.html?ADUIN=1339764596&ADSESSION=1401536826&ADTAG=CLIENT.QQ.5329_.0&ADPUBNO=26349 声明:本文是写给弱校ACM新手的一点

我们依旧在追梦的路上-山东省第六届ACM比赛总结

这场比赛从结果而言达到了预期(金牌),从过程而言和我的预期相差甚远(打的太乱,个人发挥很差),还好关键时刻队友抗住压力,负责后果真的不堪设想。 热身赛 热身赛纯粹测机器的,先把A,B,C草草水过(A题小写x打成大写的也是醉了),我和老高开始各种测机器,long long不出所料是lld的,试了一下除0和数组越界的re问题,发现没有re,只有wa(甚至数组越界还AC了),至于栈深的话也没过多追

CF Bayan 2015 Contest Warm Up B.(dfs+暴力)

B. Strongly Connected City time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/probl