CCF:202009-1-称检测点查询(C++)

题目

题目链接:http://118.190.20.162/view.page?gpid=T113
问题描述
某市设有 n个核酸检测点,编号从1到n,其中i号检测点的位置可以表示为一个平面整数坐标 (xi,yi)
为方便预约核酸检测,请根据市民所在位置(X,Y),查询距其最近的三个检测点。
多个检测点距离相同时,编号较小的视为更近。
输入格式
输入共 n+1行。
第一行包含用空格分隔的三个整数 n,X 和Y表示检测点总数和市民所在位置。
第二行到第n+1行依次输入n个检测点的坐标。第i+1行(1≤i≤n)包含用空格分隔的两个整数xi和yi表示 i号检测点所在位置。
输出格式
输出共三行,按距离从近到远,依次输出距离该市民最近的三个检测点编号。
样例输入

5 0 1
-1 0
0 0
1 0
0 2
-1 2

样例输出

2
4
1

代码

#include 
#include 
using namespace std;
struct node//构建一个结构体 
{
	int distance;
	int index;
};
int main()
{
	int n,X,Y;
	cin>>n>>X>>Y;//检测点总数和市民所在位置
	int x[n],y[n];//检测点所在位置
	node dist[n];
	for(int i=0;i<n;i++)
	{
		cin>>x[i]>>y[i];
		dist[i].index=i+1;
		dist[i].distance=(X-x[i])*(X-x[i])+(Y-y[i])*(Y-y[i]); //计算距离 
	}
	for(int i=0;i<n-1;i++)//采用稳定排序:冒泡排序 
	{
		for(int j=0;j<n-1-i;j++)
		{
			if(dist[j].distance>dist[j+1].distance)
			{
				node temp;
				temp=dist[j];
				dist[j]=dist[j+1];
				dist[j+1]=temp;
			}
		}
	}
	cout<<dist[0].index<<endl<<dist[1].index<<endl<<dist[2].index;
	return 0;
 } 

结果

在这里插入图片描述

你可能感兴趣的:(CSP,c++,csp,ccf)