#include #include using namespace std; #define MAX 101000 int n, k, idx, bs; double s[MAX], tmr, bsr; pair p[MAX], q[MAX]; mt19937 rng(24102002); double dist(pair p, pair q, double sp) { return sp * sqrt((p.first - q.first) * (p.first - q.first) + (p.second - q.second) * (p.second - q.second)); } int main() { freopen("runners.in", "r", stdin); freopen("runners.out", "w", stdout); scanf("%d%d", &n, &k); for(int i = 1; i <= k; i++)scanf("%lf", &s[i]); for(int i = 1; i <= n; i++) { scanf("%d%d", &p[i].first, &p[i].second); } for(int i = 1; i <= k; i++) { q[i] = p[1 + (5 * rng()) % n]; printf("%d %d\n", q[i].first, q[i].second); } for(int i = 1; i <= n; i++) { bs = idx = (1 + (2 * rng()) % k); bsr = tmr = dist(q[idx], p[i], s[idx]); for(int j = 1; j <= 2; j++) { idx = (1 + (2 * rng()) % k); tmr = dist(q[idx], p[i], s[idx]); if(bsr > tmr) { bs = idx; bsr = tmr; } } printf("%d\n", bs); q[bs] = p[i]; } return 0; } /* 10 8 3 4 14 15 12 6 11 8 5 14 9 7 */