百练 / 2017大数据研究中心夏令营上机考试 A: 点排序

题目来源:http://bailian.openjudge.cn/dsj2017xly/A

A:点排序

总时间限制1000ms   内存限制: 65536kB

描述

给定一个点的坐标(x, y),在输入的n个点中,依次计算这些点到指定点的距离,并按照距离进行从小到大排序,并且输出点的坐标(如果距离相同,将x轴坐标比较小的点排到前面, 如果距离相等且x轴坐标也相同,则将y轴坐标较小的点排到前面)。坐标为int类型,范围为-100010001100之间正整数。

 

输入

3行,第一行为指定点的坐标x, yx, 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
#include
using namespace std;

struct node {
	int x,y,len;

	node(void){}
	node(int xx, int yy, int ll):x(xx), y(yy), len(ll){}

	bool operator < (const node &nd) const
	{
		if (len < nd.len)
		{
			return true;
		}
		else if (len == nd.len)
		{
			if (x < nd.x)
			{
				return true;
			}
			else if (x == nd.x)
			{
				if (y < nd.y)
				{
					return true;
				}

			}

		}
		return false;
	}

};

node a[105];

int main()
{
#ifndef ONLINE_JUDGE
	freopen("A.txt","r",stdin);
#endif
	int x0,y0,n,i,x,y,len;
	scanf("%d%d%d", &x0, &y0, &n);
	for (i=0; i


你可能感兴趣的:(百练OJ/poj)