Даны два входных файла (файл А и файл Б).
В файле А хранятся данные о звёздах двух кластеров. В каждой строке записана информация о расположении на карте одной звезды: сначала координата x, затем координата y (в условных единицах). Известно, что количество звёзд не превышает 1000. В файле Б хранятся данные о звёздах трёх кластеров. Известно, что количество звёзд не превышает 10 000. Структура хранения информации о звездах в файле Б аналогична файлу A. Возможные данные одного из файлов иллюстрированы графиком.
Для файла А определите координаты центра каждого кластера, затем вычислить два числа: Px — минимальное из абсцисс центров кластеров, и Py — минимальное из ординат центров кластеров.
Для файла Б определите координаты центра каждого кластера, затем вычислите два числа: Q1 — расстояние между центрами кластеров с минимальным и максимальным количеством точек, и Q2 — максимальное расстояние от центра кластера с минимальным количеством точек до любой точки кластера с максимальным количеством точек.
В ответе запишите четыре числа: в первой строке — сначала целую часть произведения затем целую часть произведения
для файла A, во второй строке — данные для файла Б.
Гарантируется, что во всех кластерах количество точек различно.
Ответ:
Приведём решение на языке Python для файла А.
f = open('demo_2025_27_А.txt')
f.readline()
ans = []
min_summ = 10**10
stars = [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(min(ans[0][0],ans[1][0]) * 10000, min(ans[0][1] , ans[1][1]) * 10000)
Ответ:
-5307 13171
47031 57453
Приведём решение Юрия Красильникова на языке Python для файла А.
from math import dist
def center(cl):
sd=[sum([dist(x,y) for y in cl]) for x in cl]
mi=sd.index(min(sd))
return cl[mi]
f=open('demo_2025_27_А.txt')
f.readline() # пропускаем заголовки (X Y)
clust=[[],[]]
for s in f:
st=list(map(float,s.replace(',','.').split()))
if st[1] < 3: # координата Y
clust[0].append(st)
else:
clust[1].append(st)
cent=[center(c) for c in clust]
px=min([c[0] for c in cent])
py=min([c[1] for c in cent])
print(int(px*10000),int(py*10000))
f=open('demo_2025_27_Б.txt')
f.readline() # пропускаем заголовки (X Y)
clust=[[],[],[]]
for s in f:
st=list(map(float,s.replace(',','.').split()))
if st[0] > 5: # координата X
clust[0].append(st)
elif st[1]<5: # координата Y
clust[1].append(st)
else:
clust[2].append(st)
clust.sort(key=len) # по возрастанию числа точек
cent=[center(c) for c in clust]
q1=dist(cent[0],cent[-1])
q2=max(dist(cent[0],x) for x in clust[-1])
print(int(q1*10000),int(q2*10000))

