(백준) 13708 – 모든 점이 있는 원 (C++)

쉬운 목차

문제

#13708: 모든 점을 포함하는 원(acmicpc.net)

설명

자세한 설명은 아래 포스팅을 참고하세요.

(백준) 2389 – 세상의 중심에서… (C++) — GreenGroup

(백준) 2389 – 세상의 중심에서… (C++)

연습 2389: In the center of the world… (acmicpc.net) 연습 2389: In the center of the world… N(1≤N≤100)이 첫 번째 줄에 지정됩니다.

다음 N 줄은 x, y 좌표를 제공합니다.

각 좌표는 소수점 이하 6자리로 표시되며,

greengroup.co.kr

#include <iostream>
#include <cmath>
#include <numeric>
using namespace std;
int a(300), b(300);

int main() {
    int N;
    cin >> N;
    for (int i = 0; i < N; i++) {
        cin >> a(i) >> b(i);
    }

    double x = accumulate(a, a + N, 0.0) / N;
    double y = accumulate(b, b + N, 0.0) / N;

    double ratio = 0.1, max_distance, current_distance;
    for (int i = 0; i < 30000; i++) {
        int max_distance_index = 0;
        max_distance = hypot(x - a(0), y - b(0));
        for (int j = 1; j < N; j++) {
            current_distance = hypot(x - a(j), y - b(j));
            if (max_distance < current_distance) {
                max_distance = current_distance;
                max_distance_index = j;
            }
        }
        x += (a(max_distance_index) - x) * ratio;
        y += (b(max_distance_index) - y) * ratio;
        ratio *= 0.999;
    }

    if (round(x) == 0) x = 0;
    if (round(y) == 0) y = 0;

    cout.precision(2);
    cout << fixed;
    cout << max_distance * 2;

    return 0;
}