专栏文章
Fear of the Dark
CF1886B题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @minsl7fs
- 此快照首次捕获于
- 2025/12/02 07:40 3 个月前
- 此快照最后确认于
- 2025/12/02 07:40 3 个月前
时间复杂度: 可过。
分两种情况。
1
一个灯笼可以包括两个点。
2
要走两个灯笼。
这种方法要注意的是:
- 两个点都要覆盖。
- 两个圆要有交点。
代码注意细节,附有详细注释。
CPP#include<bits/stdc++.h>
using namespace std;
int T,px,py,ax,ay,bx,by;
double ss(int px,int py,int nx,int ny){//用勾股定理求两点距离
int x=px-nx,y=py-ny;
return sqrtl(x*x+y*y);
}
double solve1(int x,int y){//第一种情况
double s1=ss(x,y,px,py);
double s2=ss(x,y,0,0);
return max(s1,s2);
}
double solve2(int ax,int ay,int bx,int by){//第二种情况
double s1=ss(ax,ay,0,0);
double s2=ss(bx,by,px,py);
double s3=ss(ax,ay,bx,by)/double(2.0);//要让两个圆相交
return max(s1,max(s2,s3));
}
int main(){
cin>>T;
while(T--){
cin>>px>>py>>ax>>ay>>bx>>by;
//注意:无法确定两个灯笼的位置,所以两种情况要互换灯笼位置
double ans1=min(solve1(ax,ay),solve1(bx,by));
double ans2=min(solve2(ax,ay,bx,by),solve2(bx,by,ax,ay));
printf("%.10lf\n",min(ans1,ans2));
}
return 0;
}
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...