1 条题解
-
0
#include <bits/stdc++.h> using namespace std; const long long INF = 0x7fffffffffffffffLL; const int MAXN = 400000 + 5; int n; struct Point { long long x, y; }; Point p[MAXN]; bool cmpX(Point x, Point y) { return x.x < y.x; } bool cmpY(Point x, Point y) { return x.y < y.y; } long long dis(int x, int y) { return (p[x].x - p[y].x) * (p[x].x - p[y].x) + (p[x].y - p[y].y) * (p[x].y - p[y].y); } vector<int> cal; long long gao(int l, int r) { if (l == r) return INF; int mid = (l + r) / 2; long long midx = p[mid].x; long long dl = gao(l, mid); long long dr = gao(mid + 1, r); inplace_merge(p + l, p + mid + 1, p + r + 1, cmpY); long long dd = min(dl, dr); cal.clear(); for (int i = l; i <= r; i++) if ((p[i].x - midx) * (p[i].x - midx) <= dd) cal.push_back(i); for (int i = 0; i < cal.size(); i++) { int ii = cal[i]; for (int j = i + 1; j < cal.size(); j++) { int jj = cal[j]; if ((p[jj].y - p[ii].y) * (p[jj].y - p[ii].y) > dd) break; dd = min(dd, dis(ii, jj)); } } return dd; } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n; for (int i = 1; i <= n; i++) cin >> p[i].x >> p[i].y; sort(p + 1, p + n + 1, cmpX); cout << gao(1, n) << "\n"; return 0; }
- 1
信息
- ID
- 8969
- 时间
- 350ms
- 内存
- 512MiB
- 难度
- 5
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者