Присоединиться

11 класс·высокий уровень

Учёный решил провести кластеризацию некоторого множества звёзд по их

Условие

Учёный решил провести кластеризацию некоторого множества звёзд по их расположению на карте звёздного неба. Кластер звёзд — это набор звёзд (точек) на графике, лежащий внутри прямоугольника высотой H и шириной W. Каждая звезда обязательно принадлежит только одному из кластеров.

Истинный центр кластера, или центроид, — это одна из звёзд на графике, сумма расстояний от которой до всех остальных звёзд кластера минимальна. Под расстоянием понимается расстояние Евклида между двумя точками A(x₁, y₁) и B(x₂, y₂) на плоскости, которое вычисляется по формуле: d(A,B)=((x2−x1)2+(y2−y1)2)d ( A, B ) = \sqrt{( ( x_2 - x_1 )^{2} + ( y_2 - y_1 )^{2} )} В файле A хранятся данные о звёздах двух кластеров, где H = 3, W = 3 для каждого кластера. В каждой строке записана информация о расположении на карте одной звезды: сначала координата x, затем координата y. Значения даны в условных единицах. Известно, что количество звёзд не превышает 1000.В файле Б хранятся данные о звёздах трёх кластеров, где H = 3, W = 3 для каждого кластера. Известно, что количество звёзд не превышает 10 000.Структура хранения информации о звездах в файле Б аналогична файлу А.Файл AФайл BДля каждого файла определите координаты центра каждого кластера, затем вычислите два числа: Pₓ — среднее арифметическое абсцисс центров кластеров, и P_y — среднее арифметическое ординат центров кластеров.В ответе запишите четыре числа: в первой строке сначала целую часть произведения Pₓ × 10 000 , затем целую часть произведения P_y × 10 000 для файла А, во второй строке — аналогичные данные для файла Б.Возможные данные одного из файлов иллюстрированы графиком.

Рисунок к задаче

Ответ:

Ответ

Ответ и полный разбор откроются после входа

Посмотреть ответ

Решение по шагам

  1. Как рассуждать

    Решение. Приведём решение на языке Python. f = open('demo_2025.txt')f.readline()ans = []min_summ = 10**10stars = [list(map(float, s.replace(',','.').split())) for s in f] for i in range (len(stars) - 1): for j in range(i+1, len (stars) - 1): center1 = stars[i] center2 = stars[j] summ = 0 for star in stars: d1 = ((star[0] - center1[0]) ** 2 + (star[1] - center1[1]) ** 2)**0.5 d2 = ((star[0] - center2[0]) ** 2 + (star[1] - center2[1]) ** 2)**0.5 summ += min(d1, d2) if summ < min_summ: min_summ = summ ans = [center1, center2] print((ans[0][0] + ans[1][0]) / 2 * 10000, (ans[0][1] + ans[1][1]) / 2 *

Осталось ещё 2 шага

  1. Ответ: 10738 30730 37522 51277 Приведём…

  2. for i in range(2)]print(*answer)…

Получить полное решение

Бесплатно · займёт минуту

Другие задачи по теме «Программирование»