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

Класс светимости звезды определяется в соответствии с таблицей:

Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных точек кластера минимальна. Для каждого кластера гарантируется единственность его центра. Расстояние между двумя точками на
плоскости А(х1, у1 )) и В( х2, y2) вычисляется по формуле:
В файле А хранятся данные о звёздах двух кластеров, где Н = 5 и W= 4 для каждого кластера. В каждой строке записана информация одной звезды: координата х , координата у и её характеристика. Значения даны в условных единицах. Известно, что количество точек не превышает 1000.
В файле Б хранятся данные о звёздах трёх кластеров, где Н = 3 и W = 5 для каждого кластера. Известно, что количество точек не превышает 10 000.
Структура хранения информации о звёздах в файле Б аналогична структуре в файле А .
Для файла А определите координаты центра каждого кластера, затем найдите два числа: А1 — абсциссу ближайшего белого гиганта к центру кластера с наименьшим количеством точек, А2 — ординату ближайшего белого гиганта к центру кластера с наименьшим количеством точек.
Для файла Б определите координаты центра каждого кластера, затем найдите два числа: В1 — расстояние между центрами кластеров с наибольшим и наименьшим количеством красных сверхгигантов, и В2 — максимальное расстояние между двумя жёлтыми карликами, находящимися в одном кластере.
В ответе запишите четыре числа: в первой строке — сначала целую часть произведения А1 × 10 000, затем целую часть произведения А2 х 10 000; во второй строке — сначала целую часть произведения В1 × 10 000, затем целую часть произведения В2 × 10 000.

Ответ:
для файла А
A1 × 10000 A2 × 10000для файла Б
B1 × 10000 B2 × 10000
СтатГрад Вариант ИН2510501 14 апреля 2026 по информатике – задание №27
[229, 250]
[[38.970620418312336, 18.851501568814687], ‘B9IV’]
[[[37.35910643644985, 17.61813462116667], ‘A4III’], [[39.31404517225578, 18.290447324250056], ‘A5III’], [[38.27686662727429, 20.645509970387618], ‘A5III’], [[39.02054737781699, 18.269948438629243], ‘A7III’], [[38.665949548032366, 17.795747465766873], ‘A1III’], [[38.39695653114809, 17.332953256294694], ‘A7III’]]
[39.02054737781699, 18.269948438629243]
390205 182699
для файла Б

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
from math import * f = open('ege-statgrad-14042026-27_B.txt') clusters = [[],[],[]] for line in f.readlines(): x = float(line.split()[0]) y = float(line.split()[1]) code = line.split()[2] if x>21 and x<24 and y>4 and y<7: clusters[0].append([[x,y],code]) elif x>22 and x<25 and y>10 and y<13: clusters[1].append([[x,y],code]) elif x > 21 and x < 24 and y > 15 and y < 19: clusters[2].append([[x, y], code]) print([len(x) for x in clusters]) def centroid(cl): m=[] for p in cl: s=0 for p1 in cl: s+=dist(p[0],p1[0]) m.append([s,p]) return min(m)[1] centr_clA=centroid(clusters[0]) centr_clB=centroid(clusters[1]) centr_clC=centroid(clusters[2]) print(len([p for p in clusters[0] if p[1][0]=='M' and p[1][2:]=='I'])) print(len([p for p in clusters[1] if p[1][0]=='M' and p[1][2:]=='I'])) print(len([p for p in clusters[2] if p[1][0]=='M' and p[1][2:]=='I'])) print(int(dist(centr_clA[0], centr_clB[0])*10000)) joltie_karlik_clA=[p for p in clusters[0] if p[1][0]=='G' and p[1][2:]=='V'] joltie_karlik_clB=[p for p in clusters[1] if p[1][0]=='G' and p[1][2:]=='V'] joltie_karlik_clC=[p for p in clusters[2] if p[1][0]=='G' and p[1][2:]=='V'] def max_ras(cl): m=[] for p in cl: for p1 in cl: m.append(dist(p[0],p1[0])) return max(m) print(max_ras(joltie_karlik_clA)) print(max_ras(joltie_karlik_clB)) print(max_ras(joltie_karlik_clC)) print(int(1.6460723218595985*10000)) |
[399, 397, 408]
8
12
9
60306
1.5261245642456283
1.5594425787431287
1.6460723218595985
16460
Ответ:
390205 182699
60306 16460
