HDU
来源:互联网 发布:vscode terminal 编辑:程序博客网 时间:2024/06/05 05:20
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6097
题目大意:给出圆内或圆上的两个点,这两个点到圆心的距离相等,一个点在圆上动,求他们的距离和最小
官方题解:
解体思路:就是根据官方题解的思路做的,如果不懂圆的反演的话可以看 http://blog.csdn.net/nightmare_ak/article/details/77073899 因为P点和Q点(题目中的称呼)是对称,所以很多东西都可以直接通过中垂线和相似求出,比如P’Q’可以通过PQ相似求出等,最后要注意的是,特判P,Q在圆心(0不能当除数)
AC代码:
#include<cstdio>#include<cmath>using namespace std;struct Pos{ double _x, _y; Pos(double x=0,double y=0):_x(x),_y(y){}};int main(){ int t;scanf("%d", &t); while (t--) { double r; scanf("%lf", &r); Pos p, q; scanf("%lf%lf%lf%lf", &p._x, &p._y, &q._x, &q._y); double Dpq = (p._x - q._x)*(p._x - q._x) + (p._y - q._y)*(p._y - q._y); double Dop = p._x*p._x + p._y*p._y; if (Dop < 1e-6)//特判两个点在圆心 printf("%.7f\n", 2 * r); else if (r*r*(Dop - Dpq / 4) / (Dop*Dop) >= 1) printf("%.7f\n", 2*sqrt(r*r-2*r*sqrt(Dop-Dpq/4)+Dop)+1e-8);//直接在中垂线上求PD+QD else printf("%.7f\n", r * sqrt(Dpq/Dop)+1e-8);//P'Q'之间的距离乘上系数 } return 0;}
阅读全文
0 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- 文件组织和索引
- bzoj4870 [Shoi2017]组合数问题(dp+矩阵倍增)
- redis缓存总结一
- Java动态代理
- 搭建Hexo博客
- HDU
- hdu2604 queuing(dp+矩阵倍增)
- ArrayMaxTwoNum
- 词法分析
- 待解决:如何打开lazarus中math.pp下FPDOC_MATH编译选项
- JAVA设计模式之访问者模式
- bzoj2875 [noi2012]随机数生成器(矩阵倍增)
- ICML17 Seq2Seqtutorial精品资料分享
- Python中的模块学习之mock模块