#include #include using namespace std; float dist(int Xa, int Ya, int Xb, int Yb){ int sq1 = Xb-Xa; int sq2 = Yb-Ya; return sqrt(sq1*sq1 + sq2*sq2); } bool lg(int Xa, int Ya, int Xb, int Yb){ if(Xa < Xb) return 0; else if(Xa > Xb) return 1; else{ if(Ya < Yb) return 0; else return 1; } } int main(){ int n, Xboss, Yboss, k, bk = 0; cin >> n >> k >> Xboss >> Yboss; int closestPoints[k+1][3]; /// 0- dist 1- x, 2- y for(int i = 0; i < n; ++i){ int Xa, Ya, cDist; cin >> Xa >> Ya; cDist = dist(Xboss,Yboss,Xa,Ya); int j = bk; while(j > 0 && (cDist < closestPoints[j-1][0] || (cDist == closestPoints[j-1][0] && lg(closestPoints[j-1][1],closestPoints[j-1][2], Xa,Ya) ) ) ){ closestPoints[j][0] = closestPoints[j-1][0]; closestPoints[j][1] = closestPoints[j-1][1]; closestPoints[j][2] = closestPoints[j-1][2]; j--; } closestPoints[j][0] = cDist; closestPoints[j][1] = Xa; closestPoints[j][2] = Ya; if(bk < k) bk++; } for(int i = 0; i < k-1; ++i){ cout << closestPoints[i][1] << " " << closestPoints[i][2]<< endl; } cout << closestPoints[k-1][1] << " " << closestPoints[k-1][2]; return 0; }