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

Даны два вход­ных файла (файл А и файл Б).

Файл A

Файл B

В файле А хра­нят­ся дан­ные о звёздах двух кла­сте­ров. В каж­дой стро­ке за­пи­са­на ин­фор­ма­ция о рас­по­ло­же­нии на карте одной звез­ды: сна­ча­ла ко­ор­ди­на­та x, затем ко­ор­ди­на­та y (в услов­ных еди­ни­цах). Из­вест­но, что ко­ли­че­ство звёзд не пре­вы­ша­ет 1000. В файле Б хра­нят­ся дан­ные о звёздах трёх кла­сте­ров. Из­вест­но, что ко­ли­че­ство звёзд не пре­вы­ша­ет 10 000. Струк­ту­ра хра­не­ния ин­фор­ма­ции о звез­дах в файле Б ана­ло­гич­на файлу A. Воз­мож­ные дан­ные од­но­го из фай­лов ил­лю­стри­ро­ва­ны гра­фи­ком.

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

Для файла Б опре­де­ли­те ко­ор­ди­на­ты цен­тра каж­до­го кла­сте­ра, затем вы­чис­ли­те два числа: Q1  — рас­сто­я­ние между цен­тра­ми кла­сте­ров с ми­ни­маль­ным и мак­си­маль­ным ко­ли­че­ством точек, и Q2  — мак­си­маль­ное рас­сто­я­ние от цен­тра кла­сте­ра с ми­ни­маль­ным ко­ли­че­ством точек до любой точки кла­сте­ра с мак­си­маль­ным ко­ли­че­ством точек.

В от­ве­те за­пи­ши­те че­ты­ре числа: в пер­вой стро­ке  — сна­ча­ла целую часть про­из­ве­де­ния P_x\times 10000, затем целую часть про­из­ве­де­ния P_y\times 10 000 для файла 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))

Источник: ЕГЭ по ин­фор­ма­ти­ке 11.06.2025. Ос­нов­ная волна. Даль­ний Во­сток