#include using namespace std; typedef pair PII; #define x first #define y second PII a[110]; int n, L; vector X, Y; int ans; int main() { cin >> n >> L; for (int i = 1; i <= n; ++i) { cin >> a[i].x >> a[i].y; /* (1)按照输入的坐标先把所有可能的最终边长为L的正方形左上角坐标保存起来 (2)枚举正方形的左上角,再去统计一下有多少点在这个正方形中。取最大值。 */ X.push_back(a[i].x); X.push_back(a[i].x - L); // 边长固定是L Y.push_back(a[i].y); Y.push_back(a[i].y - L); } for (int i = 0; i < X.size(); i++) // 所有可能的左上角横坐标 for (int j = 0; j < Y.size(); j++) { // 所有可能的左上角纵坐标 int cnt = 0; int x = X[i], y = Y[j]; // 枚举出的就是所有可能的正方形 for (int k = 1; k <= n; k++) // 枚举每个金矿的坐标 // 如果此金矿的坐标,在当前枚举的正方形内部或边界上,就是覆盖到了这个金矿 if (a[k].x >= x && a[k].x <= x + L && a[k].y >= y && a[k].y <= y + L) cnt++; ans = max(ans, cnt); } cout << ans << endl; return 0; }