CSP202009-1 称检测点查询

CSP202009-1 称检测点查询

题目

题目可以在CSP观望中看到哟!

算法分析

这道题是一道关于排序的题目,题目给出了市民坐在位置的坐标,要在n个监测点中寻找到最近的三个监测点,并输出其三个的编号。排序的时候,如果距离一样,则编号小的排在前面(这就是排序条件)。
首先,按照距离由小到大进行排序,距离一样的话,按照编号从小到大排序。利用sort快速排序即可,可以自定义它的排序条件,代码如下。
结果截图

完整代码

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#pragma warning (disable:4996)
using namespace std;
int n, X, Y;
int x[1000], y[1000];
struct Point
{
	int num;
	double dis;
}point[1000];
bool cmp(Point a, Point b)
{
	if (a.dis != b.dis) return a.dis < b.dis;
	else return a.num < b.num;
}
int main()
{
	freopen("in.in", "r", stdin);
	freopen("out.out", "w", stdout);
	int i, j;
	cin >> n >> X >> Y;
	for (i = 1; i <= n; i++)
		cin >> x[i] >> y[i];
	for (i = 1; i <= n; i++)
	{
		point[i].num = i;
		point[i].dis = sqrt((x[i] - X) * (x[i] - X) + (y[i] - Y) * (y[i] - Y));
	}
	sort(point + 1, point + n + 1, cmp);
	for (i = 1; i <= 3; i++)
	{
		cout << point[i].num;
		if (i != 3) cout << endl;
	}
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值