(백준) 9158 – 슈퍼스타 (C++)

쉬운 목차

문제

9158: 슈퍼스타 (acmicpc.net)

#9158: 슈퍼스타

우주선 Hakodate-maru(문제 A 참조)의 항해 중에 연구자들은 별들의 이상하게 동기화된 움직임을 발견했습니다.

이러한 관찰을 들은 후 Dr. Extreme은 “슈퍼스타” 이론을 제안했습니다.

이 용어를 배우나 배우에 대한 설명으로 받아들이지 마십시오.

www.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;
double a(1001), b(1001), c(1001);

int main() {
    while (1) {
        int N;
        cin >> N;

        if (N == 0) break;

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

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

        double ratio = 0.1, max_distance, current_distance;
        for (int i = 0; i < 70000; i++) {
            int max_distance_index = 0;
            max_distance = hypot(x - a(0), y - b(0), z - c(0));
            for (int j = 1; j < N; j++) {
                current_distance = hypot(x - a(j), y - b(j), z - c(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;
            z += (c(max_distance_index) - z) * ratio;
            ratio *= 0.999;
        }

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

        cout.precision(5);
        cout << fixed;
        cout << max_distance << "\n";
    }

    return 0;
}