题目:

zjh一觉醒来发现自己被困在了一个不为人知的地方,身边只有一幅地图,上面画着自己所在的位置,以及目的位置,落款竟然是zwt这个大魔王!!!为了找到zwt决战,并且不耽误时间,zjh想请你找到一个可以到达决战地点(x, y)最短的路径,请你帮帮他

地图如上所示,你的位置下面是大海,圆圈内是岩浆,圆圈的边缘是陆地,目的地的圆内一定是陆地,你的任务是找到到达(x, y)的最短距离

注意y可能会小于ry,且保证一定有解,并且两个圆不相交

输入描述

一共有T组,每组的数据依次为rx,ry,rr,x,y,r

数据范围(−102≤rx,ry,x,y≤102 , 0<r,rr≤10^2)

其中rx,ry为岩浆圈的坐标,rr为岩浆圈的半径,x,y为目的地的坐标,r为目的地的半径

输出描述

每行输出一个最短距离,保留4位小数

样例输入

2
1 1 1 3 2 1
1 1 1 1 3 1

样例输出

2.9850
3.8264

思路:这道题是个数学题,具备三角函数知识与基本编程知识的就可以解掉,首先有三种情况
第一种情况是 fabs(x-rx) <= rr
∠A的角度我们是可以求出来的,根据1/2absinC这个公式可以求出∠A的大小,然后再求小段圆弧所对应的角度,这个角度可以用大角减去上面角的角度得到,上面角已知两边并且是个直角三角形,根据公式得到小角的角度,对应的圆弧长就是小角+90度,总长度就是直线+这段圆弧的长度

第二种情况,fabs(x-rx) > rr && ry <= y
这种情况就是1/4段圆弧长 + 直线距离

第三种情况 ,fabs(x-rx) > rr && ry > y
有些人看到这里会疑惑,但是题目中说明一定有解,那么这个圆上的点一定可以走,而坐标,半径已知,我们不难求出总长度以上为这三种情况的图

题解

#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
#define PI 3.1415926535double len(double a, double b, double c, double d)
{return sqrt((a - c) * (a - c) + (b - d) * (b - d));
}double hu(double r, double jd)
{return 2 * PI * r * (jd / 360.0);
}
int main()
{// freopen("D:\\1.in", "r", stdin);// freopen("D:\\9.out", "w", stdout);int t;cin >> t;while (t--){double rx, ry, r, x, y, jd, rr;double ans = 0;cin >> rx >> ry >> rr >> x >> y >> r;if (fabs(rx - x) <= r){/*以下是根据S = 1/2absinC,以及反三角函数求角度,最后求弧长*/double S = rr * fabs(y - ry) / 2;double sinC = S * 2 / (len(rx, ry, x, y) * rr);double jd = asin(sinC) * 180.0 / PI + 90.0;double jd1 = acos(r / len(rx, ry, x, y)) * 180.0 / PI;ans = hu(rr, jd - jd1) + sqrt(len(rx, ry, x, y) * len(rx, ry, x, y) - r * r);}else{ans += hu(rr, 90.0);// cout << ans << endl;if (y >= ry){if (x < rx)ans += len(rx - rr, ry, x, y);elseans += len(rx + rr, ry, x, y);}else{ans += fabs(x - rx) - fabs(rr) - sqrt(r * r - (y - ry) * (y - ry)) + r;}}printf("%.4lf\n", ans);}return 0;
}

nuc-oj-最终圣战相关推荐

  1. 奥特linux系统监控,奥特曼知识大挑战答案

    奥特曼知识大挑战答案是最近抖音上非常火的测试,主要看用户们对奥特曼的了解度有多少,而且这里的奥特曼还分很多种哦,相信很多小伙伴都不知道吧,那就邀请好友一起来奥特曼知识大挑战答案手机版中测试一下,先做了 ...

  2. 奥特曼视频软件测试,抖音奥特曼知识问答测试答案大全 奥特曼知识大挑战问答竞赛答案...

    抖音特曼知识问答测试的答案是什么呢,这一次的问题与答案对于很多的伙伴们来说也是非常值得你们去看的问题哦,那么现在就让我们一起啦看看特曼知识问答测试的答案还有更多的合理分析吧,其实特曼知识问答测试的答案 ...

  3. 奥特曼视频软件测试,抖音奥特曼知识问答测试,奥特曼知识大挑战问答竞赛答案...

    奥特曼有非常多的知识,不仅仅只有迪迦奥特曼这么的简单,今天小编就会与大家一起来分享一些关于奥特曼的一些问题和相关的答案,用户可以在这里了解更多的知识,那么就让我们一起来看看到底是如何学习和使用的,还有 ...

  4. 【ACM】杭电OJ 1241(深度优先搜索小结)

    题目链接:杭电OJ 1241 深度优先搜索问题 深度优先搜索是搜索的手段之一.它从某个状态开始,不断地转移状态直到无法转移,然后回退到前一步的状态,继续转移到其他状态,如此不断重复,直至找到最终的解. ...

  5. Windows 8的圣战

    在最近Google公布的一段公司视频中,Google的一群核心算法程序员开会正在讨论未来如何改善Google的搜索算法,然而他们的讨论并没有引起太多人的注意,所有开会人员几乎统一的苹果电脑成为了这段视 ...

  6. (最终作业)面向对象先导课课程总结

    在最后一节课的末尾,吴老师带着我们做了一个简单的回顾.对这两周课程整体进行了总结. 一.课程核心要义--Java面向对象编程的四个基本特征 1.封装 主要是把过程和数据包围起来,不对外部公开内部的数据 ...

  7. 详解单链表经典OJ题

    文章目录 前言 一 删除链表中等于给定值"val"的所有节点 二 反转一个单链表 三 求中间节点 四 链表倒数第K个节点 五 合并有序链表 六 链表分割 注意细节: 七 删除重复结 ...

  8. 用Java刷OJ超时怎么办?原因分析及解决方式

    Java超时原因? 又是Java超时. PAT不给Java延时,简直欺负Java选手.因为Java本身底层的一些原因,编译.运行起来会比其他语言慢一些.有很多其他OJ都放宽Java时间限制了. 以后除 ...

  9. OJ系统里用BufferedReader提高效率

    在OJ系统中做编程题时,如果从System.in读入的数据非常大的时候,使用Scanner非常影响效率,可能导致最终代码超时,所以最好改用BufferedReader来读取字符数据. 例如: impo ...

  10. JavaScript 框架之战结束:React 是最终赢家?

    编译 | 张仕影 出品 | CSDN(ID:CSDNnews) 框架之间的论战一直以来都是 JavaScript 社区的热门话题,也是业内的圣战之一.从刚开始的 jQuery,到后来的 Angular ...

最新文章

  1. dell 远程访问管理卡iDRAC 7
  2. 存储过程和SQL语句比较【转】
  3. 用PHP写出显示客户端IP与服务器IP的代码
  4. 算法基础系列之三:螺旋形矩阵
  5. 如何批量查问PR值、百度权重、百度快照及收录量,用BlueCatTools批量网站查询工具
  6. 给广告打“保”字标、弄风险提示 百度搜索为用户旅游操碎了心
  7. 使用读写锁实现同步数据访问
  8. 网盘纷纷“隐退” 云存储仍是刚需
  9. 饿了么UI框架表单验证
  10. WRF Output Fields描述
  11. 如何在jieba分词中加自定义词典_中文到底需要分词嘛?
  12. 缓解迷茫焦虑的最好方法:用自己的方式好好生活
  13. sql注入pythonpoco_SQL注入原理与解决方法代码示例
  14. 苹果系统无法购买服务器,梦幻西游手游iOS目前无法处理您的购买解决办法
  15. 集合的运算(C++单链表实现)
  16. vep加密视频破解转换为mp4教程
  17. poi setFontFamily设置微软雅黑有问题??
  18. ws发布web servlce
  19. 数学建模的经典问题总结(一)
  20. 富贵论坛的发展大事记

热门文章

  1. mysql快速导数脚本,shell实现半自动化导数
  2. Linux netstat | losf (查看端口占用情况)
  3. 物联网通信技术|计算机网络
  4. 北京市规划委员会通州分局
  5. 业内人士真心话,网络安全是没有前途的,我慌了......
  6. eggache_for_my_valentine
  7. 人工智能拯救生命:自杀倾向预测
  8. Node.js实现MySQL数据库连接池
  9. 应用在触摸液晶显示器中的触摸芯片
  10. 绝地求生台服登录出现服务器维修,绝地求生:刺激战场 M无法连接服务器如何解决...