研究生演算法 2-4 YY and Point
阿新 • • 發佈:2020-12-11
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define INF 9223372036854775807LL struct point { int x, y; point(int x, int y): x(x), y(y) {}; bool operator <(point obj) { return y < obj.y; } }; int n; vector <point> input; ll dis(point a, point b) { return pow(a.x - b.x, 2) + pow(a.y - b.y, 2); } ll solve(int l, int r) { if (l == r) { return INF; } int mid = (l + r) >> 1; ll d = min(solve(l, mid), solve(mid + 1, r)); vector <point> v; for (int i = l; i <= r; i++) { if (dis(input[mid], input[i]) < d) { v.push_back(input[i]); } } for (int i = 0; i < v.size(); i++) { for (int j = i + 1; j < v.size(); j++) { d = min(d, dis(v[i], v[j])); } } return d; } int main() { cin >> n; for (int i = 0; i < n; i++) { int x, y; cin >> x >> y; input.push_back(point(abs(x), abs(y))); } sort(input.begin(), input.end()); cout << solve(0, n - 1) << endl; }