点排序
总时间限制: 1000ms 内存限制: 65536kB
描述
给定一个点的坐标(x, y),在输入的n个点中,依次计算这些点到指定点的距离,并按照距离进行从小到大排序,并且输出点的坐标(如果距离相同,将x轴坐标比较小的点排到前面, 如果距离相等且x轴坐标也相同,则将y轴坐标较小的点排到前面)。坐标为int类型,范围为-1000到1000。n 为1到100之间正整数。
输入
3行,第一行为指定点的坐标x, y。x, y之间用空格隔开。第二行为一个整数n。第三行为n个点的坐标,彼此之间用空格间隔。
输出
按照距离进行从小到大排序,输出点的坐标(如果距离相同,将x轴坐标比较小的点排到前面,如果距离相等且x轴坐标也相同,则将y轴坐标较小的点排到前面)。注意输出中同一个点内部括号中无空格,点和点之间逗号后面存在空格。
样例输入
0 0
5
1 0 0 1 1 1 5 2 4 0
样例输出
(0,1), (1,0), (1,1), (4,0), (5,2)
示例代码
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct point
{
int x;
int y;
int d;
};
int cmp(point a,point b)
{
if(a.d==b.d){
if(a.x==b.x) return a.y<b.y;
else return a.x<b.x;
}
else return a.d<b.d;
}
int main()
{
int x0,y0,n,x,y,d;
while(cin>>x0>>y0){
cin>>n;
point p[105];
for(int i=0; i<n; i++){
cin>>x>>y;
d=(x-x0)*(x-x0)+(y-y0)*(y-y0);
p[i].x=x;
p[i].y=y;
p[i].d=d;
}
sort(p,p+n,cmp);
for(int i=0; i<n-1; i++){
printf("(%d,%d), ",p[i].x,p[i].y);
}
printf("(%d,%d)",p[n-1].x,p[n-1].y);
}
return 0;
}