csp-M4-B-ZJM要抵御宇宙射线
Posted liuzhuan-xingyun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csp-M4-B-ZJM要抵御宇宙射线相关的知识,希望对你有一定的参考价值。
题目描述:
据传,2020年是宇宙射线集中爆发的一年,这和神秘的宇宙狗脱不了干系!但是瑞神和东东忙于正面对决宇宙狗,宇宙射线的抵御工作就落到了ZJM的身上。
假设宇宙射线的发射点位于一个平面,ZJM已经通过特殊手段获取了所有宇宙射线的发射点,他们的坐标都是整数。而ZJM要构造一个保护罩,这个保护罩是一个圆形 ,*中心位于一个宇宙射线的发射点上*。同时,因为大部分
经费都拨给了瑞神,所以ZJM要节省经费,做一个最小面积的保护罩。当ZJM决定好之后,东东来找ZJM一起对抗宇宙狗去了,所以ZJM把问题扔给了你~
输入描述
输入第一行一个正整数N,表示宇宙射线发射点的个数
接下来N行,每行两个整数X,Y,表示宇宙射线发射点的位置
输出描述
输出包括两行
第一行输出保护罩的中心坐标x,y用空格隔开
第二行输出保护罩半径的平方
(所有输出保留两位小数,如有多解,输出x较小的点,如还有多解,输入y较小的点)
无行末空格
样例输入
5
0 0
0 1
1 0
0 -1
-1 0
1
2
3
4
5
样例输出
0.00 0.00
1.00
解题思路:
暴力搜索,从所有点中找一个点,使得其到其余点的最大距离最短即可!
注意
1)数据范围:距离平方会超出int,所以dis用 long long 存储
2)多解输出 x较小,y较小的点(节点关键字排序)
代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<algorithm> 5 using namespace std; 6 typedef long long ll; 7 int N; // 8 //求最小覆盖半径和中心点坐标 9 struct node{ 10 int x; 11 int y; 12 }; 13 bool cmp(node n1,node n2){ 14 if(n1.x!=n2.x) return n1.x<n2.x; 15 else return n1.y<n2.y; 16 } 17 node p[1001]; 18 ll dis[1001][1001]; 19 ll maxd[1001]; 20 int index; 21 int main(){ 22 cin>>N; 23 //找一点到所有其他所有点最大距离最小 24 for(int i=1;i<=N;i++){ 25 cin>>p[i].x>>p[i].y; 26 // for(int j=1;j<i;j++){ 27 // dis[i][j]= pow((p[i].x-p[j].x),2)+pow((p[i].y-p[j].y),2); 28 // dis[j][i]=dis[i][j] ; 29 // //cout<<"dis["<<i<<"]["<<j<<"] :"<<dis[i][j]<<endl; 30 // } 31 } 32 sort(p+1,p+N+1,cmp); 33 // for(int i=1;i<=N;i++) cout<<p[i].x<<" "<<p[i].y<<endl; 34 35 for(int i=1;i<=N;i++){ 36 for(int j=1;j<i;j++){ 37 dis[i][j]= pow((p[i].x-p[j].x),2)+pow((p[i].y-p[j].y),2); 38 dis[j][i]=dis[i][j] ; 39 //cout<<"dis["<<i<<"]["<<j<<"] :"<<dis[i][j]<<endl; 40 } 41 } 42 for(int i=1;i<=N;i++) dis[i][i]=0; 43 //maxd[i] means maxdis for i to each points 44 long long maxdis=999999999999; 45 for(int i=1;i<=N;i++){ 46 maxd[i]=0; 47 for(int j=1;j<=N;j++){ 48 if(maxd[i] < dis[i][j]) 49 maxd[i]=dis[i][j]; 50 } 51 //cout<<"maxd["<<i<<"]: "<<maxd[i]<<endl; 52 if(maxd[i]<maxdis){ 53 maxdis=maxd[i]; 54 index =i; 55 } 56 //cout<<"index:"<<index<<endl; 57 //cout<<maxdis<<endl; 58 } 59 printf("%lld.00 %lld.00 %lld.00 ",p[index].x,p[index].y,maxdis); 60 // printf("%.2f %.2f ",double(p[index].x),double(p[index].y)); 61 // printf("%.2f ",double(maxdis)); 62 // for(int i=1;i<=N;i++){ 63 // 64 // } 65 66 67 return 0; 68 }
以上是关于csp-M4-B-ZJM要抵御宇宙射线的主要内容,如果未能解决你的问题,请参考以下文章