Skip to content

Commit

Permalink
Add 02389.cpp
Browse files Browse the repository at this point in the history
  • Loading branch information
Hiyabye committed Feb 7, 2024
1 parent 40ca206 commit c30ad35
Showing 1 changed file with 65 additions and 0 deletions.
65 changes: 65 additions & 0 deletions 02xxx/02389.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#include <cmath>
#include <iomanip>
#include <iostream>
#include <utility>
#include <vector>
using namespace std;

typedef struct Point {
double x, y;
Point(void) : x(0), y(0) {}
Point(double x, double y) : x(x), y(y) {}
} Point;

inline double dist(const Point& a, const Point& b) {
return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}

inline Point circle(const Point& a, const Point& b, const Point& c) {
return Point(
((b.x*b.x-c.x*c.x+b.y*b.y-c.y*c.y)*(a.y-b.y)-(b.x*b.x-a.x*a.x+b.y*b.y-a.y*a.y)*(c.y-b.y)) / (2*(a.x-b.x)*(c.y-b.y)-2*(c.x-b.x)*(a.y-b.y)),
((b.y*b.y-c.y*c.y+b.x*b.x-c.x*c.x)*(a.x-b.x)-(b.y*b.y-a.y*a.y+b.x*b.x-a.x*a.x)*(c.x-b.x)) / (2*(a.y-b.y)*(c.x-b.x)-2*(c.y-b.y)*(a.x-b.x))
);
}

bool check(const Point& mid, const vector<Point>& v, double r) {
for (const auto& p : v) {
if (dist(mid, p) > r) return false;
}
return true;
}

void solve(void) {
int n; cin >> n;
vector<Point> v(n);
for (int i=0; i<n; i++) cin >> v[i].x >> v[i].y;

pair<Point, double> ans = make_pair(Point(0, 0), 1e9);
for (int i=0; i<n-1; i++) {
for (int j=i+1; j<n; j++) {
Point mid((v[i].x + v[j].x) / 2, (v[i].y + v[j].y) / 2);
double r = dist(v[i], mid);
if (r < ans.second && check(mid, v, r)) ans = make_pair(mid, r);
}
}

for (int i=0; i<n-2; i++) {
for (int j=i+1; j<n-1; j++) {
for (int k=j+1; k<n; k++) {
if ((v[i].x - v[j].x) * (v[k].y - v[j].y) == (v[k].x - v[j].x) * (v[i].y - v[j].y)) continue;
Point mid = circle(v[i], v[j], v[k]);
double r = dist(v[i], mid);
if (r < ans.second && check(mid, v, r)) ans = make_pair(mid, r);
}
}
}
cout << fixed << setprecision(4) << ans.first.x << " " << ans.first.y << " " << ans.second;
}

int main(void) {
ios::sync_with_stdio(false);
cin.tie(nullptr);

solve();
return 0;
}

0 comments on commit c30ad35

Please sign in to comment.