1207. Median on the Plane
Memory Limit: 16 MB
Input
Output
Sample
input | output |
---|---|
4 0 0 1 0 0 1 1 1 |
1 4 |
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
struct Point {
double x, y;
int rank;
}p[10009];
double direction(Point p1, Point p2) {
return ((p1.x-p[0].x)*(p2.y-p[0].y)-(p2.x-p[0].x)*(p1.y-p[0].y));
}
int cmp(Point p1, Point p2) {
if (direction(p1, p2)>0)
return 0;
return 1;
}
int main()
{
int i, n, k = 0;
scanf("%d", &n);
for (i = 0; i < n; ++i) {
scanf("%lf %lf", &p[i].x, &p[i].y);
p[i].rank = i+1;
if (p[i].x < p[k].x || (p[i].x == p[k].x &&p[i].y < p[k].y))
k = i;
}
swap(p[0], p[k]);
sort(p+1, p+n, cmp);
printf("%d %d\n", p[0].rank, p[n/2].rank);
return 0;
}