2017 多校训练第六场 HDU 6097 Mindis
2017-08-10 23:40
483 查看
给出一个圆的半径,然后给出两个点P,Q的坐标,都不超出圆而且|OP|=|OQ|,问圆上一点到P和Q的距离之和最小是多少。
根据题解写了一份程序,请各位大佬参考
根据题解写了一份程序,请各位大佬参考
#include <bits/stdc++.h> using namespace std; // #define test TEST int main(int argc, char const *argv[]) { #ifdef test freopen("test.txt","r",stdin); #endif int T; scanf("%d",&T); while(T--){ double r,a,b,c,d; scanf("%lf %lf %lf %lf %lf",&r,&a,&b,&c,&d); double rr=sqrt(a*a+b*b); double k=r*r/(rr*rr); double aa=k*a,bb=k*b,cc=k*c,dd=k*d; double dislen=(aa*dd-bb*cc)/sqrt((cc-aa)*(cc-aa)+(dd-bb)*(dd-bb)); if(fabs(dislen)<=r){//反演点的连线与圆有交点 printf("%.7f\n",sqrt((a*r/rr-c*r/rr)*(a*r/rr-c*r/rr)+(b*r/rr-d*r/rr)*(b*r/rr-d*r/rr))); // printf("%.7f\n",sqrt((aa-cc)*(aa-cc)+(bb-dd)*(bb-dd))); continue; } //最优值在中垂线上取到 double diss=sqrt((a-c)*(a-c)+(b-d)*(b-d)); double t=r-sqrt(rr*rr-diss*diss/4); double ans=sqrt(diss*diss/4+t*t)*2; printf("%.7f\n",ans); } return 0; }
相关文章推荐
- 2017 多校训练第六场 HDU 6098 Inversion
- 2017 多校训练第六场 HDU 6106 Classes
- 2017 多校训练第五场 HDU 6085
- HDU 6166 && 2017 多校训练:Senior Pan(最短路)
- 2017 Multi-University Training Contest - Team 6-HDU 6097:Mindis
- 第六场 hdu 6097 Mindis (几何)
- HDU-2017 多校训练赛10-补题
- 2017 多校训练第五场 HDU 6092 Rikka with Subset
- 2017 多校训练第二场 HDU 6053 TrickGCD
- (2017多校训练第三场)HDU - 6063 RXD and math 找规律 + 快速幂
- (2017多校训练第七场)HDU - 6129 Just do it 找规律
- HDU 6134 && 2017 多校训练:Battlestation Operational(莫比乌斯反演+积性函数)
- (2017多校训练第一场)HDU - 6034 Balala Power! 贪心
- HDU 6178 && 2017 多校训练:Monkeys(DFS)
- hdu 6097 Mindis(多校联赛)
- HDU-2017 多校训练赛10-1002-Array Challenge
- 2017 多校训练第二场 HDU 6052 To my boyfriend
- (2017多校训练第四场)HDU - 6069 Counting Divisors 区间筛
- 2017 多校训练第四场 HDU 6069 Counting Divisors
- (2017多校训练第一场)HDU - 6035 Colorful Tree 树形dp