Задания
Версия для печати и копирования в MS Word
Тип 27 № 79740
i

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

Будем на­зы­вать цен­тром кла­сте­ра точку этого кла­сте­ра, сумма рас­сто­я­ний от ко­то­рой до всех осталь­ных точек кла­сте­ра ми­ни­маль­на. Для каж­до­го кла­сте­ра га­ран­ти­ру­ет­ся един­ствен­ность его цен­тра. Рас­сто­я­ние между двумя точ­ка­ми на плос­ко­сти A левая круг­лая скоб­ка x_1, y_1 пра­вая круг­лая скоб­ка и B левая круг­лая скоб­ка x_2, y_2 пра­вая круг­лая скоб­ка вы­чис­ля­ет­ся по фор­му­ле:

 d левая круг­лая скоб­ка A, B пра­вая круг­лая скоб­ка = ко­рень из: на­ча­ло ар­гу­мен­та: левая круг­лая скоб­ка x_2 минус x_1 пра­вая круг­лая скоб­ка в квад­ра­те плюс левая круг­лая скоб­ка y_2 минус y_1 пра­вая круг­лая скоб­ка в квад­ра­те конец ар­гу­мен­та .

В файле А хра­нят­ся ко­ор­ди­на­ты точек двух кла­сте­ров, где H  =  6, W  =  6 для каж­до­го кла­сте­ра. В каж­дой стро­ке за­пи­са­на ин­фор­ма­ция о рас­по­ло­же­нии на карте одной звез­ды: сна­ча­ла ко­ор­ди­на­та x, затем ко­ор­ди­на­та y. Из­вест­но, что ко­ли­че­ство точек не пре­вы­ша­ет 1000.

В файле Б хра­нят­ся ко­ор­ди­на­ты точек трёх кла­сте­ров, где H  =  8, W  =  8 для каж­до­го кла­сте­ра. Из­вест­но, что ко­ли­че­ство точек не пре­вы­ша­ет 10 000. Струк­ту­ра хра­не­ния ин­фор­ма­ции в файле Б ана­ло­гич­на файлу A.

Файл A

Файл B

Для каж­до­го файла опре­де­ли­те ко­ор­ди­на­ты цен­тра каж­до­го кла­сте­ра, затем вы­чис­ли­те два числа: Px  — сред­нее ариф­ме­ти­че­ское абс­цисс цен­тров кла­сте­ров и Py  — сред­нее ариф­ме­ти­че­ское ор­ди­нат цен­тров кла­сте­ров.

В от­ве­те за­пи­ши­те че­ты­ре числа: в пер­вой стро­ке  — сна­ча­ла целую часть про­из­ве­де­ния |P_x|\times 10000, затем целую часть про­из­ве­де­ния |P_y|\times 10 000 для файла A, во вто­рой стро­ке  — ана­ло­гич­ные дан­ные для файла Б.

Воз­мож­ные дан­ные од­но­го из фай­лов ил­лю­стри­ро­ва­ны гра­фи­ком.

Вни­ма­ние! Гра­фик при­ведён в ил­лю­стра­тив­ных целях для про­из­воль­ных зна­че­ний, не име­ю­щих от­но­ше­ния к за­да­нию. Для вы­пол­не­ния за­да­ния ис­поль­зуй­те дан­ные из при­ла­га­е­мо­го файла.

Ответ:

Спрятать решение

Ре­ше­ние.

##При­ведём ре­ше­ние на языке Python.

from math import dist

data = []

# Для А/Б

for s in open('1_27_A.txt'):

x, y = [float(d) for d in s.replace(',', '.').split()]

data.append([x, y])

rast = 2

clusters = []

while data:

cl = [data.pop()]

for p in cl:

sosed = [p1 for p1 in data if dist(p, p1) < rast]

for p1 in sosed:

cl.append(p1)

data.remove(p1)

clusters.append(cl)

#print(*[len(cl) for cl in clusters]) # - про­ве­ря­ет кол-во кла­сте­ров

# 2 кла­сте­ра для файла A и 3 для файла B

# В слу­чае про­ти­во­ре­чия ме­ня­ем rast - это зна­че­ние (Для A - rast = 2, для B - rast = 1)

def centroid(cl):

m = []

for p in cl:

s = 0

for p1 in cl:

s += dist(p, p1)

m.append([s, p])

return min(m)[1]

cen = [centroid(cl) for cl in clusters]

px = abs(sum(x for x, y in cen))/len(cen)

py = abs(sum(y for x, y in cen))/len(cen)

print(int(px*10000), int(py*10000))

 

 

 

Ответ:

26216 24182

150891 63754

Источник: ЕГЭ—2025. До­сроч­ная волна 08.04.2025. Ва­ри­ант ФИПИ