当前位置: 首页 > 编程日记 > 正文

UVa 10180 - Rope Crisis in Ropeland!

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

题意:给出两点坐标,用一条最短的线(曲线或者直线)连接起来,坐标系中原点处有一个半径为R的圆,连线不能穿过这个圆。

分析:

这题我WA了好几次,原因是把double的坐标搞成int了,o(╯□╰)o

 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <cmath>
 4 
 5 const double PI = acos( -1.0 );
 6 
 7 struct point
 8 {
 9     double x, y;
10 };
11 
12 point O;  //坐标原点
13 
14 double Get_Dist( point &a, point &b )    //计算两点间距离
15 {
16     return sqrt( (a.x - b.x)*(a.x - b.x) + (a.y - b.y )*(a.y - b.y) );
17 }
18 
19 double Get_Angle( double a, double b, double c )  //余弦定理求角度
20 {
21     return acos( (b*b + c*c - a*a) / (2*b*c) );
22 }
23 
24 bool check( point &m, point &n, double x, double y )  //判断坐标( x, y )是否在点 m, n 之间
25 {
26     double minx = m.x < n.x ? m.x : n.x;
27     double maxx = m.x > n.x ? m.x : n.x;
28     double miny = m.y < n.y ? m.y : n.y;
29     double maxy = m.y > n.y ? m.y : n.y;
30     return ( x > minx && x <= maxx && y >= miny && y <= maxy );
31 }
32 
33 bool Judge( point &m, point &n, double &R )           //判断是否需要绕过圆
34 {
35     if ( m.x == n.x )                                 //特判与y轴平行的线
36     {
37         if ( abs(m.x) >= R ) return true;
38         else
39         {
40             if ( m.y * n.y > 0 ) return true;
41             else return false;
42         }
43     }
44     else if ( m.y == n.y )                             //特判与x轴平行的线
45     {
46         if ( abs(m.y) >= R ) return true;
47         else
48         {
49             if ( m.x * n.x > 0 ) return true;
50             else return false;
51         }
52     }
53 
54     double A = n.y - m.y;                              //两点连成的直线,求直线方程一般式,计算A, B, C
55     double B = m.x - n.x;
56     double C = (n.x - m.x) * m.y - (n.y - m.y) * m.x;
57     double dis = abs(C)/ sqrt( A*A + B*B );            //原点到直线的距离
58     if ( dis >= R ) return true;
59     else
60     {
61         double kkk = (-A) / B;
62         double bbb = (-C) / B;
63         double xx = ( -bbb ) / ( kkk + 1.0 / kkk );
64         double yy = ( (-1.0) / kkk ) * xx;
65         if ( check( m, n, xx, yy ) ) return false;     //如果线段穿过圆
66         else return true;                              //如果线段不穿过圆
67     }
68 }
69 
70 int main()
71 {
72     int T;
73     double R;
74     point A, B;
75     O.x = 0;
76     O.y = 0;
77     scanf( "%d", &T );
78     while ( T-- )
79     {
80         scanf( "%lf%lf%lf%lf%lf", &A.x, &A.y, &B.x, &B.y, &R );
81 
82         if ( Judge(A, B, R) )                             //如果不需要绕过圆
83             printf( "%.3f\n", Get_Dist(A, B) );
84         else                                              //如果需要绕过圆
85         {
86             double L1 = Get_Dist(A, O);
87             double L2 = Get_Dist(B, O);
88             double LL1 = sqrt( L1*L1 - R*R );
89             double LL2 = sqrt( L2*L2 - R*R );
90             double angle = Get_Angle( Get_Dist(A, B), L1, L2 ) - acos( R/L1 ) - acos( R/L2 );
91             double ans = LL1 + LL2 + R * angle;
92             printf( "%.3f\n", ans );
93         }
94     }
95     return 0;
96 }

转载于:https://www.cnblogs.com/GBRgbr/archive/2012/08/21/2649587.html

相关文章:

【组队学习】【24期】河北邀请赛(二手车价格预测)

河北邀请赛&#xff08;二手车价格预测&#xff09; 开源内容&#xff1a; https://github.com/datawhalechina/team-learning-data-mining/tree/master/SecondHandCarPriceForecast 数据挖掘实践&#xff08;二手车价格预测&#xff09;的内容来自 Datawhale与天池联合发起…

什么样的人合适学习Python?

什么样的人合适学习Python?近几年&#xff0c;关注Python技术的小伙伴越来越多&#xff0c;很多人都想知道Python培训好不好学?难不难学?哪些人适合学?来看看下面的详细介绍。 Python培训分享&#xff1a;什么样的人合适学习Python?想学好python&#xff0c;关键还是看三点…

Table doesn't have a primary key

从数据库取出来的数据&#xff0c;一般会放在一个DataTable中。但是&#xff0c;Insus.NET想实现一个小功能&#xff0c;就是在这个DataTable能快速找到某一行记录&#xff0c;来显示于asp.net页面上。这时我们可以使用DataTable的Find()成員函式來檢查資料是否已存在。但当Ins…

【组队学习】【24期】数据挖掘实践(智慧海洋)

数据挖掘实践&#xff08;智慧海洋&#xff09; 开源内容&#xff1a; https://github.com/datawhalechina/team-learning-data-mining/tree/master/wisdomOcean 基本信息 贡献人员&#xff1a;李运佳、李万业、赵信达、张晋、刘羽中、王贺、肖明远学习周期&#xff1a;12天…

vim 输入中文

收藏一些有关vim输入中文的链接为了以后方便查看 http://vimim.googlecode.com/svn/vimim/vimim.html http://www.wang3feng.com/2010/07/03/e5-ad-a6vim-e4-ba-8c-e5-a6-82-e4-bd-95-e5-9c-a8vim-e4-b8-ad-e6-9b-b4-e5-a5-bd-e7-9a-84-e8-be-93-e5-85-a5-e4-b8-ad-e6-96-87/ 本…

Web前端工程师的一些常见误区

想要作为一名合格的web前端工程师&#xff0c;那么掌握基本的开发技术是远远不够的&#xff0c;在职场中还要少犯一些错误&#xff0c;本期小编为大家分享的web前端培训教程主要是介绍一些web前端工程师常见的误区&#xff0c;希望对大家有所帮助。 web前端培训分享&#xff1a…

WPF关闭应用程序,释放Window窗口资源方法

WindowsForm里一个Application.Exit();方法就可以关闭应用程序&#xff0c;释放掉资源。 WPF里Application类没有该方法&#xff0c;但是有一个Exit的事件驱动&#xff0c;在WPF应用程序里面关闭程序讲究很多&#xff1a; 在WPF应用程序的关闭是有ShutdownMode属性设置&#xf…

《Cisco/H3C交换机配置与管理完全手册(第2版)》终稿封面和目录

无数网友一直殷切期待和关注的《Cisco/H3C交换机配置与管理完全手册》&#xff08;第2版&#xff09;一书即将于本月底正式上市了。到时对于真实读者&#xff0c;写书评后可以参加全额返款的抽奖活动&#xff0c;加入我的微博(本博客首页中有)&#xff0c;留意我发布的最新资讯…

【组队学习】【24期】Docker教程

Docker教程 开源内容&#xff1a; https://github.com/datawhalechina/team-learning-program/tree/master/Docker 基本信息 贡献人员&#xff1a;苏鹏、陈安东&#xff0c;于鸿飞&#xff0c;陈长沙&#xff0c;丁一超&#xff0c;乔石&#xff0c;刘雯静学习周期&#xf…

网站ui的配色有哪些需要注意的?

作为一名UI设计师&#xff0c;那么关于配色的问题是非常注重的&#xff0c;尤其是做一款网站设计&#xff0c;配色方面要非常注意&#xff0c;本期小编为大家介绍的UI设计培训教程就是关于网站ui的配色有哪些需要注意的?来看看下面的详细介绍。 UI设计培训分享&#xff1a;网站…

2、安装Lync Server 2013

一、实验环境拓扑的准备工作 二、开始安装Lync Server 2013 安装Lync Server系统主要包含以下的内容&#xff1a;安装本地配置存储、安装Lync Server 组件、请求并分配Lync证书、启动服务。 运行Lync Server 2013的安装程序&#xff0c;选择“安装或更新Lync Server系统”&…

!! 机器学习常用工具

http://fuliang.iteye.com/blog/955023 机器学习 Support Vector Machine SVMlightAn implementation of Vapniks Support Vector Machine LIBSVMA Library for Support Vector Machines Decision Tree C4.5The "classic" decision-tree tool, developed by J. R. Qu…

Datawhale组队学习周报(第010周)

本周&#xff08;04月19日~04月25日&#xff09;&#xff0c;第 24 期组队学习正在如火如荼的进行中。本期组队学习&#xff0c;一共有 5 门开源课程&#xff0c;共组建了 6 个学习群&#xff0c;参与的学习者有 788 人。另外&#xff0c;第 25 期组队学习也蓄势待发准备与大家…

零基础怎么学习Java?

最近几年&#xff0c;有很多小伙伴都比较关注“零基础怎么学习Java?”这个问题&#xff0c;因为很多小伙伴都是从其他行业转型来参加java培训学习的&#xff0c;都很担心自己学不会&#xff0c;那么来看看下面的详细介绍吧。 零基础怎么学习Java?来看看以下才几点java培训学习…

如何爬取知乎中问题的回答以及评论的数据?

如何爬取知乎中问题的回答以及评论的数据&#xff1f; 我们以爬取“为什么中医没有得到外界认可&#xff1f;”为例来讨论一下如何爬取知乎中问题的回答以及评论的数据。 爬取网页数据通常情况下会经历以下三个步骤。 第一步&#xff1a;网页分析&#xff0c;确认自己所要数据…

Facebook如何使用Avartarnode提升HDFS可靠性

在不久前的Hadoop峰会上&#xff0c;Facebook的工程师Andrew Ryan分享了他们如何使用Namenode和Avatarnode提升HDFS可靠性的方法。Ryan从2009年开始&#xff0c;就参与到了Facebook的 Hadoop开发中。在他的帮助下&#xff0c;Facebook的Hadoop和HDFS数据基础设施&#xff0c;从…

无法远程分发安装软件原因

一、问题及原因 最近做实验在域环境通过组策略分发软件、防病毒网络版远程安装客户端软件都失败&#xff0c;真的原因在于&#xff1a;阻止对Windows注册表的远程访问引起来的。客户端是XP系统&#xff0c;通过Ghost版本安装的&#xff0c;默认是禁用Windows XP注册表的远程访…

小程序的ui应该怎么设计?

UI设计中小程序的设计是很多UI设计师在工作中会碰到的&#xff0c;一款好的小程序设计页面&#xff0c;会带来效果很好的用户体验&#xff0c;下面小编就为大家详细的分享一下具体小程序的ui应该怎么设计? UI设计培训分享&#xff1a;小程序的ui应该怎么设计? 一、导航明确&a…

什么是ThreadLocal

顾名思义它是local variable&#xff08;线程局部变量&#xff09;。它的功用非常简单&#xff0c;就是为每一个使用该变量的线程都提供一个变量值的副本&#xff0c;使每一个线程都可以独立地改变自己的副本&#xff0c;而不会和其它线程的副本冲突。从线程的角度看&#xff0…

【组队学习】【25期】Datawhale组队学习内容介绍

第25期 Datawhale 组队学习活动马上就要开始啦&#xff01; 本次组队学习的内容为&#xff1a; web开发入门教程数据挖掘实战&#xff08;异常检测&#xff09;集成学习&#xff08;下&#xff09; 大家可以根据我们的开源内容进行自学&#xff0c;也可以加入我们的组队学习…

为pony程序添加IACA标记(二)

在上一篇文章介绍了一种加IACA标记的方法&#xff0c;但使用还是很麻烦&#xff0c;所以我尝试修改pony编译器&#xff0c;直接增加了IACA支持&#xff0c;目前代码在iaca分支。 使用方法 因为还没发PR到上游&#xff0c;所以要自己克隆编译。 git clone https://github.com/or…

Python培训就业怎么样?

学习Python技术的同学越来越多&#xff0c;很多人都比较看好Python这项技术&#xff0c;觉得Python的前景是不错的&#xff0c;那么具体Python培训就业怎么样呢?来看看下面的详细介绍就知道了。 Python培训就业怎么样?国家大力推行互联网人工之智能技术、大数据技术等&#x…

Oracle Connect to an idle instance

意思是数据库没有启动。转载于:https://www.cnblogs.com/vigarbuaa/archive/2012/09/05/2671825.html

【青少年编程】【Scratch】10 画笔模块

10 画笔模块 有关于画笔模块&#xff0c;需要掌握以下两个方面的内容&#xff1a; 能够设置画笔的属性&#xff1a;颜色、粗细、亮度/饱和度/透明度能够使用画笔绘制各种图案&#xff1a;抬笔、落笔、擦除 1. 使用者可以设置各种画笔属性。 另外&#xff0c;可以将角色设置为…

4-1 ADO.NET简介

第四章ADO.NET数据库访问技术本章内容4-1 ADO.NET 简介4-2 ADO.NET&#xff0d;插入、删除、修改、检索数据4-3 DataGridView 控件 — 显示和操作数据4-4本章小结 本章重点介绍WINDOWS应用程序对数据访问所涉及的SYSTEM.DATA.SQLCLIENT、SYSTEM.DATA.OLEDB、SYSTEM.DATA.ORA…

Java培训出来后一般多少工资

学完Java培训出来后一般多少工资呢?这是很多人都比较关心的一个问题&#xff0c;小编在这里告诉大家&#xff0c;java技术这个岗位分为初级、中级和高级&#xff0c;每个等级的工资情况也是不一样&#xff0c;来看看下面的详细介绍。 Java培训出来后一般多少工资?Java程序员薪…

NeHe OpenGL第四十一课:体积雾气

NeHe OpenGL第四十一课&#xff1a;体积雾气 体积雾气 把雾坐标绑定到顶点&#xff0c;你可以在雾中漫游&#xff0c;体验一下吧。 这一课我们将介绍体积雾&#xff0c;为了运行这个程序&#xff0c;你的显卡必须支持扩展"GL_EXT_fot_coord"。 #include <wi…

如何做中文文本的情感分析?

如何做中文文本的情感分析&#xff1f; 这是本学期在大数据哲学与社会科学实验室做的第三次分享了。 第一次分享的是&#xff1a;如何利用“wordcloudjieba”制作中文词云&#xff1f; 第二次分享的是&#xff1a;如何爬取知乎中问题的回答以及评论的数据&#xff1f; 本次…

java游戏开发--连连看-让程序运行更稳定、更高效

之六&#xff09;优化&#xff1a;让程序运行更稳定、更高效 改善游戏的合理性 到目前为止&#xff0c;我们的游戏基本上算是完成了&#xff0c;为了使程序更合理&#xff0c;我们还需要将整个程序从头再理一遍&#xff0c;看看有没有改进的地方。 首先&#xff0c;在变量的…

学java是不是必须要参加java培训班?

学java是不是必须要参加java培训班?java技术对于零基础的同学来说学习起来是比较困难的&#xff0c;所以对于这个问题&#xff0c;小编的回答是当然要参加java培训班进行系统学习&#xff0c;下面来看看到底有没有必要报班学习? 学java是不是必须要参加java培训班?学习Java无…