1. 程式人生 > >bailian-chayuan-2017-A-point sort

bailian-chayuan-2017-A-point sort

ret problem 空格 距離 log algo n-2 algorithm ref

A:點排序

  • 查看
  • 提交
  • 統計
  • 提問
總時間限制:
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 <stdio.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;

struct E{
    int x, y;
    int dis;
}buf[101];

bool cmp(E a, E b)  {
    if(a.dis != b.dis) return a.dis < b.dis;
    
else if(a.x != b.x) return a.x < b.x; else if(a.y != b.y) return a.y < b.y; return false; } int main() { int a, b; scanf("%d%d", &a, &b); int n; scanf("%d", &n); for(int i = 0; i < n; i++ ){ scanf("%d%d", &buf[i].x, &buf[i].y); buf[i].dis
= (buf[i].x - a)*(buf[i].x - a) + (buf[i].y - b)*(buf[i].y - b); } sort(buf, buf+n, cmp); for(int i = 0; i < n-1; i++) { printf("(%d,%d), ", buf[i].x, buf[i].y); } printf("(%d,%d)", buf[n-1].x, buf[n-1].y); system("PAUSE"); return 0; }

because the exam is end, I don‘t know whether my answer is right

bailian-chayuan-2017-A-point sort