Problem description:
Given N N N points on the plane. Find the K t h Kth Kth closest point to the origin ( 0 , 0 ) (0,0) (0,0). (Here, the distance between two points on a plane is the Euclidean distance.)
Input:
Line 1: N N N K K K
Others: point coordinate
Output:
Line 1: K t h Kth Kth closest point to the origin ( 0 , 0 ) (0,0) (0,0)
Sample Input 1:
2 1
1 3
-2 2
Sample Output 1:
-2 2
Solution1:
#include <iostream>
#include <cstdio>
#include <cmath>
#include<algorithm>
using namespace std;
struct point{
long long int x;
long long int y;
unsigned long long int distance;
};
bool cmp(point a, point b){
return a.distance < b.distance;
}
int main()
{
int n, k;
scanf("%d%d",&n, &k);
const int N=n, K=k;
point points[N];
int i;
for(i=0; i<N; i++){
scanf("%lld%lld",&points[i].x, &points[i].y);
points[i].distance = ((points[i].x)*(points[i].x)) + ((points[i].y)*(points[i].y));
}
sort(points, points+N, cmp);
cout << points[K-1].x << ' ' << points[K-1].y << endl;
return 0;
}
注意1:
- 算法首先求出所有点到 ( 0 , 0 ) (0,0) (0,0)的距离,然后sort排序直接求出距离 ( 0 , 0 ) (0,0) (0,0)第K近的点。
- 算法复杂度和空间复杂度较高。
- 可通过创建结构体存储点的坐标。
- sort函数有三个参数,第三个参数可以制定排序规则。