Задание 27 ЕГЭ по информатике 2027: кластеры и анализ данных

Задание 27 ЕГЭ по информатике — анализ данных из файла: записи разбивают на кластеры по условию, в каждом кластере находят центр и по ним считают величины из условия. С 2027 года ответ записывают одной строкой из двух чисел, за полностью верный ответ ставят 2 балла.

Как решать

В демоверсии 2027 года задание 27 устроено так: в каждой строке файла — сведения об одном объекте (числа с десятичной запятой и признак), и объекты нужно разбить на K кластеров по одной величине, которую считают по формуле из условия. У любых двух объектов одного кластера эта величина отличается не больше чем на R, и условие гарантирует, что такое разбиение одно.

При кластеризации по одной величине посчитайте её для каждой строки, отсортируйте объекты по ней и разрежьте список там, где соседние значения отличаются больше чем на R: каждый кусок и есть кластер. Проверьте себя: кластеров должно получиться ровно K.

Центр кластера по условию — объект, у которого сумма модулей разностей величины с остальными объектами кластера минимальна. Его находят перебором: для каждого объекта считают сумму и берут минимум. При нечётном числе объектов с разными значениями это медиана кластера.

Числа в файле записаны с десятичной запятой, а разделителями могут быть несколько пробелов и табуляций. Замените запятые точками и разбейте строку методом split() без аргументов: он понимает любые пробельные разделители.

В ответ идут целые части величин, умноженных на 10 000: int(q * 10000), функция round здесь не подходит. С 2027 года оба числа записывают одной строкой. Если числа перепутаны местами или верно только одно число на своём месте, ставят 1 балл.

Примеры с решением

Пример 1

В файле — сведения о датчиках на плоскости: в каждой строке координаты x и y и тип датчика (буква A, B или C). Числа записаны с десятичной запятой, значения разделены пробелами или табуляциями. Датчики расположены на K = 3 кольцах вокруг начала координат: у любых двух датчиков одного кольца расстояния до начала координат различаются не больше чем на R = 1,0, и такое разбиение на кольца единственно. Центром кольца назовём датчик, у которого сумма модулей разностей расстояний до начала координат с остальными датчиками кольца минимальна; для каждого кольца центр единственный.

Найдите Q1 — наибольшее евклидово расстояние между двумя датчиками типа B одного кольца, и Q2 — наименьшее расстояние до начала координат среди центров колец. В ответе запишите два числа: сначала целую часть произведения Q1 × 10 000, затем целую часть произведения Q2 × 10 000.

Файл данных: 27_ex1.txt — 875 строк, 12,7 КБ. Первые строки файла:

2,44   -11,31  B
0,77  -2,50	B
-1,00	-7,62	A
-4,86	5,15  C
-11,61 -2,99  C
1,16   -2,45	B
-0,63 	2,96   C
11,12 	4,99 	A

Решение на Python

from math import dist, hypot

R = 1.0
points = []
for line in open('27_ex1.txt'):
    x, y, kind = line.replace(',', '.').split()
    x, y = float(x), float(y)
    points.append((hypot(x, y), x, y, kind))  # расстояние до начала координат — первым

# Кольца: сортируем по расстоянию и режем там, где соседние отличаются больше чем на R.
points.sort()
rings = [[points[0]]]
for p in points[1:]:
    if p[0] - rings[-1][-1][0] > R:
        rings.append([])
    rings[-1].append(p)

q1 = 0
centers = []
for ring in rings:
    center = min(ring, key=lambda p: sum(abs(p[0] - q[0]) for q in ring))
    centers.append(center)
    b = [p for p in ring if p[3] == 'B']
    for i in range(len(b)):
        for j in range(i + 1, len(b)):
            q1 = max(q1, dist(b[i][1:3], b[j][1:3]))
q2 = min(c[0] for c in centers)
print(int(q1 * 10000), int(q2 * 10000))

Ответ: 246879 30223

Величина для кластеризации — расстояние до начала координат, hypot(x, y). После сортировки по ней соседние датчики разных колец отличаются больше чем на 3, а внутри кольца — на сотые доли, поэтому список режется на три кольца. Для Q1 перебираются пары датчиков типа B внутри каждого кольца, Q2 — расстояние до начала координат у центра внутреннего кольца, около 3,02.

Пример 2

В файле — сведения о поездках такси: в каждой строке координаты точки посадки x1, y1, координаты точки высадки x2, y2 и класс машины (эконом, комфорт или бизнес). Числа записаны с десятичной запятой, значения разделены пробелами или табуляциями. Поездки разбиваются на K = 4 кластера по длине поездки — расстоянию между точками посадки и высадки: у любых двух поездок одного кластера длины различаются не больше чем на R = 1,0, и такое разбиение единственно. Центр кластера — поездка, у которой сумма модулей разностей длины с остальными поездками кластера минимальна; для каждого кластера центр единственный.

Найдите Q1 — среднее арифметическое длин поездок-центров и Q2 — наибольшую длину поездки класса «бизнес» в кластере, где больше всего поездок. В ответе запишите два числа: сначала целую часть произведения Q1 × 10 000, затем целую часть произведения Q2 × 10 000.

Файл данных: 27_ex2.txt — 864 строки, 34,6 КБ. Первые строки файла:

8,55   5,27   18,85   -1,42   комфорт
17,92   3,10   13,58   0,89   эконом
19,50   3,38   15,15   0,90   эконом
1,30   8,63   -0,94   16,57   эконом
6,95 -8,04 -4,36 -13,47 эконом
8,01 -14,68 1,12 -19,97 эконом
-0,95  0,69  -1,16  -1,73  бизнес
9,60	-11,69	11,12	-13,46	комфорт

Решение на Python

from math import hypot

R = 1.0
trips = []
for line in open('27_ex2.txt', encoding='utf-8'):
    *coords, car = line.replace(',', '.').split()
    x1, y1, x2, y2 = map(float, coords)
    trips.append((hypot(x2 - x1, y2 - y1), car))

trips.sort()
clusters = [[trips[0]]]
for t in trips[1:]:
    if t[0] - clusters[-1][-1][0] > R:
        clusters.append([])
    clusters[-1].append(t)

centers = [min(c, key=lambda p: sum(abs(p[0] - q[0]) for q in c))[0] for c in clusters]
q1 = sum(centers) / len(centers)
biggest = max(clusters, key=len)
q2 = max(d for d, car in biggest if car == 'бизнес')
print(int(q1 * 10000), int(q2 * 10000))

Ответ: 70448 25911

Длина поездки — расстояние между двумя точками, hypot(x2 - x1, y2 - y1). После сортировки по длине список режется на четыре кластера. Запись *coords, car = ...split() кладёт четыре числа строки в список coords, а последнее слово — класс машины — в переменную car. Файл открыт с кодировкой utf-8, потому что классы записаны по-русски.

Типичные ошибки

Потренироваться на тренажёре

Частые вопросы

Что изменилось в задании 27 ЕГЭ в 2027 году?

Ответ записывают одной строкой из двух чисел, а до 2027 года он занимал две строки по два числа. В демоверсии 2027 года объекты разбивают на кластеры по одной величине, которую считают по формуле из условия.

Как найти кластеры в задании 27?

Если кластеры задают по одной величине, отсортируйте объекты по ней и разрежьте список там, где соседние значения отличаются больше чем на R. Для точек на плоскости помогает точечная диаграмма в электронной таблице: на ней видно, где проходят границы между группами точек.

Сколько баллов дают за задание 27?

2 первичных балла за полностью верный ответ. Если числа перепутаны местами или верно только одно число на своём месте, ставят 1 балл.

Официальные материалы

Другие задания

Все задания и структура экзамена — на странице ЕГЭ по информатике. Соседние разборы: задание 26.

Описание задания сверено 28 сентября 2026 года со спецификацией 2027 года (документы 2027 года). Примеры составлены нами по структуре демоверсии, каждое решение запущено, и напечатанный им ответ совпадает с ответом на странице. Кодолимп не связан с разработчиками экзамена. Заметили неточность — напишите нам.