Задание 27. Анализ данных. Кластеризация. ЕГЭ 2026 по информатике

За это задание ты можешь получить 2 балла. На решение дается около 40 минут. Уровень сложности: высокий.
Средний процент выполнения: 14%
Ответом к заданию 27 по информатике может быть развернутый ответ (полная запись решения с обоснованием выполненных действий).

Алгоритм решения задания 27:

  1. Внимательно прочитай условие и определи цель анализа данных.
  2. Выдели исходные данные и оцени их полноту и корректность.
  3. Выполни очистку данных: исключи лишние, ошибочные или неподходящие значения.
  4. Выбери способ обработки и модель, подходящие для решения задачи.
  5. Преобразуй данные в удобный для анализа вид.
  6. Проанализируй данные с использованием выбранной модели.
  7. При необходимости представь результаты в виде таблиц или графиков.
  8. Сделай выводы и интерпретируй полученный результат.
  9. Запиши ответ в требуемом формате.

Задачи для практики

Задача 1

РЕШЕНИЕ БЕЗ ОТВЕТА НЕ ПРИНИМАЕТСЯ, В ПРОТИВНОМ СЛУЧАЕ РАБОТА БУДЕТ АННУЛИРОВАНА

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

Аномалиями назовём точки, для которых расстояние до точек кластера превышает 1. При проведении вычислений с кластерами, аномалии нужно игнорировать.

Расстояние между двумя точками на плоскости A(x1, y1) и B(x2, y2) вычисляется по формуле:

d(A, B) = √((x2 - x1)2 + (y2 - y1)2)

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

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

Для каждого файла определите dmin - минимальное расстояние между двумя точками разных кластеров и dmax - максимальное расстояние между двумя точками разных кластеров.

В ответе запишите четыре числа: в первой строке сначала целую часть произведения dmin × 10 000, затем целую часть произведения dmax × 10 000 для файла А, во второй строке – аналогичные данные для файла Б.

Решение

Решение для файла А:

def d(x1, y1, x2, y2):
    return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5

def rasst(claster1, claster2):
    min_rasst = float("inf")
    max_rasst = 0
    for dot1 in claster1:
        for dot2 in claster2:
            r = d(dot1[0], dot1[1], dot2[0], dot2[1])
            if r < min_rasst:
                min_rasst = r
            if r > max_rasst:
                max_rasst = r
    return min_rasst, max_rasst

f = open("27_5_A.txt")
claster1 = []
claster2 = []
for st in f:
    st = st.replace(",", ".")
    x, y = map(float, st.split())
    if x < -0.5 and y > 4:
        claster1.append([x, y])
    elif x > -0.5 and y < 5:
        claster2.append([x, y])
f.close()
print(len(claster1), len(claster2))
min_r, max_r = rasst(claster1, claster2)
print(int(min_r * 10_000), int(max_r * 10_000))

Решение для файла В:

def d(x1, y1, x2, y2):
    return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5

def rasst(claster1, claster2, claster3):
    min_rasst = float("inf")
    max_rasst = 0
    for dot1 in claster1:
        for dot2 in claster2:
            r = d(dot1[0], dot1[1], dot2[0], dot2[1])
            if r < min_rasst:
                min_rasst = r
            if r > max_rasst:
                max_rasst = r
        for dot3 in claster3:
            r = d(dot1[0], dot1[1], dot3[0], dot3[1])
            if r < min_rasst:
                min_rasst = r
            if r > max_rasst:
                max_rasst = r
    for dot3 in claster3:
        for dot2 in claster2:
            r = d(dot3[0], dot3[1], dot2[0], dot2[1])
            if r < min_rasst:
                min_rasst = r
            if r > max_rasst:
                max_rasst = r
    return min_rasst, max_rasst

f = open("27_5_B.txt")
claster1 = []
claster2 = []
claster3 = []
for st in f:
    st = st.replace(",", ".")
    x, y = map(float, st.split())
    if x < 2 and y > 2:
        claster1.append([x,y])
    elif 3*y + 2*x < 7:
        claster2.append([x,y])
    elif y < 3:
        claster3.append([x,y])
f.close()
print(len(claster1), len(claster2), len(claster3))
min_r, max_r = rasst(claster1, claster2, claster3)
print(int(min_r * 10_000), int(max_r * 10_000))

Ответ:

10591 52985

6565 78185

Ответ:
Показать решение
Бесплатный интенсив

Задача 2

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

Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных точек кластера минимальна. Для каждого кластера гарантируется единственность его центра. Расстояние между двумя точками на плоскости A(x1, y1) и B(x2, y2) вычисляется по формуле:

d(A, B) = √((x2 - x1)2 + (y2 - y1)2)

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

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

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

В ответе запишите четыре числа: в первой строке сначала целую часть произведения Px × 10 000, затем целую часть произведения Py × 10 000 для файла А, во второй строке – аналогичные данные для файла Б.

Решение

Решение для файла А:


def d(x1, y1, x2, y2):
    return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5


def center(claster):
    min_sum = float("inf")
    for dot_center in claster:
        x_cntr, y_cntr = dot_center
        summ = 0
        for dot in claster:
            x, y = dot
            summ += d(x_cntr, y_cntr, x, y)
        if summ < min_sum:
            min_sum = summ
            ans = [x_cntr, y_cntr]
    return ans



f = open("27_1_A.txt")
claster1 = []
claster2 = []
for st in f:
    st = st.replace(",", ".")
    x, y = map(float, st.split())
    if x < 3.5:
        claster1.append([x, y])
    else:
        claster2.append([x, y])
f.close()
c1 = center(claster1)
c2 = center(claster2)
px = (c1[0] + c2[0]) / 2
py = (c1[1] + c2[1]) / 2
print(int(px * 10000), int(py * 10000))

Решение для файла В:


def d(x1, y1, x2, y2):
    return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5


def center(claster):
    min_sum = float("inf")
    for dot_center in claster:
        x_cntr, y_cntr = dot_center
        summ = 0
        for dot in claster:
            x, y = dot
            summ += d(x_cntr, y_cntr, x, y)
        if summ < min_sum:
            min_sum = summ
            ans = [x_cntr, y_cntr]
    return ans



f = open("27_1_B.txt")
claster1 = []
claster2 = []
claster3 = []
for st in f:
    st = st.replace(",", ".")
    x, y = map(float, st.split())
    if x < 0.5 and y < 1.5:
        claster1.append([x, y])
    elif y < 1.75:
        claster2.append([x, y])
    else:
        claster3.append([x, y])
f.close()
c1 = center(claster1)
c2 = center(claster2)
c3 = center(claster3)
px = (c1[0] + c2[0] + c3[0]) / 3
py = (c1[1] + c2[1] + c3[1]) / 3
print(int(px * 10000), int(py * 10000))

Ответ для файла А: 35054 20128

Ответ для файла В: 7460 10015

Ответ:
Показать решение
Бесплатный интенсив

Задача 3

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

Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных точек кластера минимальна. Для каждого кластера гарантируется единственность его центра. Расстояние между двумя точками на плоскости A(x1, y1) и B(x2, y2) вычисляется по формуле:

d(A, B) = √((x2 - x1)2 + (y2 - y1)2)

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

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

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

В ответе запишите четыре числа: в первой строке сначала целую часть произведения Px × 10 000, затем целую часть произведения Py × 10 000 для файла А, во второй строке – аналогичные данные для файла Б.

Решение

Решение для файла А:

def d(x1, y1, x2, y2):
    return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5

def center(claster):
    min_sum = float("inf")
    for dot_center in claster:
        x_cntr, y_cntr = dot_center
        summ = 0
        for dot in claster:
            x, y = dot
            summ += d(x_cntr, y_cntr, x, y)
        if summ < min_sum:
            min_sum = summ
            ans = [x_cntr, y_cntr]
    return ans

f = open("27_3_A.txt")
claster1 = []
claster2 = []
for st in f:
    st = st.replace(",", ".")
    x, y = map(float, st.split())
    if 4*x+5*y < 39:
        claster1.append([x, y])
    else:
        claster2.append([x, y])
f.close()
c1 = center(claster1)
c2 = center(claster2)
px = (c1[0] + c2[0]) / 2
py = (c1[1] + c2[1]) / 2
print(int(px * 10000), int(py * 10000))

Решение для файла В:


def d(x1, y1, x2, y2):
    return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5

def center(claster):
    min_sum = float("inf")
    for dot_center in claster:
        x_cntr, y_cntr = dot_center
        summ = 0
        for dot in claster:
            x, y = dot
            summ += d(x_cntr, y_cntr, x, y)
        if summ < min_sum:
            min_sum = summ
            ans = [x_cntr, y_cntr]
    return ans

f = open("27_3_B.txt")
claster1 = []
claster2 = []
claster3 = []
for st in f:
    st = st.replace(",", ".")
    x, y = map(float, st.split())
    if y < -2 * x + 6 and x + 6 * y < 11:
        claster1.append([x,y])
    elif 3.8 * y - 5 * x < -3.8:
        claster2.append([x,y])
    else:
        claster3.append([x,y])
f.close()
print(len(claster1), len(claster2))
c1 = center(claster1)
c2 = center(claster2)
c3 = center(claster3)
px = (c1[0] + c2[0] + c3[0]) / 3
py = (c1[1] + c2[1] + c3[1]) / 3
print(int(px * 10000), int(py * 10000))

Ответ:

38590 47698

21562 16554

Ответ:
Показать решение
Бесплатный интенсив

Задача 4

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

Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных точек кластера минимальна. Для каждого кластера гарантируется единственность его центра. Расстояние между двумя точками на плоскости A(x1, y1) и B(x2, y2) вычисляется по формуле:

d(A, B) = √((x2 - x1)2 + (y2 - y1)2)

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

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

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

В ответе запишите четыре числа: в первой строке сначала целую часть произведения Px × 10 000, затем целую часть произведения Py × 10 000 для файла А, во второй строке – аналогичные данные для файла Б.

Решение

Решение для файла А:

def d(x1, y1, x2, y2):
    return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5


def center(claster):
    min_sum = float("inf")
    for dot_center in claster:
        x_cntr, y_cntr = dot_center
        summ = 0
        for dot in claster:
            x, y = dot
            summ += d(x_cntr, y_cntr, x, y)
        if summ < min_sum:
            min_sum = summ
            ans = [x_cntr, y_cntr]
    return ans



f = open("27_2_A.txt")
claster1 = []
claster2 = []
for st in f:
    st = st.replace(",", ".")
    x, y = map(float, st.split())
    if 3*x+4*y < 23:
        claster1.append([x, y])
    else:
        claster2.append([x, y])
f.close()
c1 = center(claster1)
c2 = center(claster2)
px = (c1[0] + c2[0]) / 2
py = (c1[1] + c2[1]) / 2
print(int(px * 10000), int(py * 10000))

Решение для файла В:


def d(x1, y1, x2, y2):
    return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5


def center(claster):
    min_sum = float("inf")
    for dot_center in claster:
        x_cntr, y_cntr = dot_center
        summ = 0
        for dot in claster:
            x, y = dot
            summ += d(x_cntr, y_cntr, x, y)
        if summ < min_sum:
            min_sum = summ
            ans = [x_cntr, y_cntr]
    return ans



f = open("27_2_B.txt")
claster1 = []
claster2 = []
claster3 = []
for st in f:
    st = st.replace(",", ".")
    x, y = map(float, st.split())
    if 2*y + x < 6 and x < 2.35:
        claster1.append([x, y])
    elif 4*y - 3*x < 0:
        claster2.append([x, y])
    else:
        claster3.append([x, y])
f.close()
c1 = center(claster1)
c2 = center(claster2)
c3 = center(claster3)
px = (c1[0] + c2[0] + c3[0]) / 3
py = (c1[1] + c2[1] + c3[1]) / 3
print(int(px * 10000), int(py * 10000))

Ответ:

25511 38171

23553 17674

Ответ:
Показать решение
Бесплатный интенсив

Задача 5

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

Аномалиями назовём точки, для которых расстояние до точек кластера превышает 1. При проведении вычислений с кластерами, аномалии нужно игнорировать.

Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных точек кластера минимальна. Для каждого кластера гарантируется единственность его центра. Расстояние между двумя точками на плоскости A(x1, y1) и B(x2, y2) вычисляется по формуле:

d(A, B) = √((x2 - x1)2 + (y2 - y1)2)

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

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

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

В ответе запишите четыре числа: в первой строке сначала целую часть произведения Px × 10 000, затем целую часть произведения Py × 10 000 для файла А, во второй строке – аналогичные данные для файла Б.

Решение

Решение для файла А:

Первый кластер отделяется от второго и аномалии условием y < 5. Второй кластер отделяется от аномалии неравенством x > 4.

def d(x1, y1, x2, y2):
    return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5

def center(claster):
    min_sum = float("inf")
    for dot_center in claster:
        x_cntr, y_cntr = dot_center
        summ = 0
        for dot in claster:
            x, y = dot
            summ += d(x_cntr, y_cntr, x, y)
        if summ < min_sum:
            min_sum = summ
            ans = [x_cntr, y_cntr]
    return ans

f = open("27_5_A.txt")
claster1 = []
claster2 = []
for st in f:
    st = st.replace(",", ".")
    x, y = map(float, st.split())
    if x < -0.5 and y > 4:
        claster1.append([x, y])
    elif x > -0.5 and y < 5:
        claster2.append([x, y])
f.close()
print(len(claster1), len(claster2))
c1 = center(claster1)
c2 = center(claster2)
px = (c1[0] + c2[0]) / 2
py = (c1[1] + c2[1]) / 2
print(int(px * 10000), int(py * 10000))

Решение для файла В:

def d(x1, y1, x2, y2):
    return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5

def center(claster):
    min_sum = float("inf")
    for dot_center in claster:
        x_cntr, y_cntr = dot_center
        summ = 0
        for dot in claster:
            x, y = dot
            summ += d(x_cntr, y_cntr, x, y)
        if summ < min_sum:
            min_sum = summ
            ans = [x_cntr, y_cntr]
    return ans

f = open("27_5_B.txt")
claster1 = []
claster2 = []
claster3 = []
for st in f:
    st = st.replace(",", ".")
    x, y = map(float, st.split())
    if x < 2 and y > 2:
        claster1.append([x,y])
    elif 3*y + 2*x < 7:
        claster2.append([x,y])
    elif y < 3:
        claster3.append([x,y])
f.close()
print(len(claster1), len(claster2), len(claster3))
c1 = center(claster1)
c2 = center(claster2)
c3 = center(claster3)
px = (c1[0] + c2[0] + c3[0]) / 3
py = (c1[1] + c2[1] + c3[1]) / 3
print(int(px * 10000), int(py * 10000))

Ответ:

-4195 45063

25565 12196

Ответ:
Показать решение
Бесплатный интенсив

Задача 6

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

Аномалиями назовём точки, для которых расстояние до точек кластера превышает 1. При проведении вычислений с кластерами, аномалии нужно игнорировать.

Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных точек кластера минимальна. Для каждого кластера гарантируется единственность его центра. Расстояние между двумя точками на плоскости A(x1, y1) и B(x2, y2) вычисляется по формуле:

d(A, B) = √((x2 - x1)2 + (y2 - y1)2)

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

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

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

В ответе запишите четыре числа: в первой строке сначала целую часть произведения Px × 10 000, затем целую часть произведения Py × 10 000 для файла А, во второй строке – аналогичные данные для файла Б.

Решение

Решение для файла А:

Первый кластер отделяется от второго и аномалии условием y < 5. Второй кластер отделяется от аномалии неравенством x > 4.

def d(x1, y1, x2, y2):
    return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5

def center(claster):
    min_sum = float("inf")
    for dot_center in claster:
        x_cntr, y_cntr = dot_center
        summ = 0
        for dot in claster:
            x, y = dot
            summ += d(x_cntr, y_cntr, x, y)
        if summ < min_sum:
            min_sum = summ
            ans = [x_cntr, y_cntr]
    return ans

f = open("27_4_A.txt")
claster1 = []
claster2 = []
for st in f:
    st = st.replace(",", ".")
    x, y = map(float, st.split())
    if y < 5:
        claster1.append([x, y])
    elif x > 4:
        claster2.append([x, y])
f.close()
print(len(claster1), len(claster2))
c1 = center(claster1)
c2 = center(claster2)
px = (c1[0] + c2[0]) / 2
py = (c1[1] + c2[1]) / 2
print(int(px * 10000), int(py * 10000))

Решение для файла В:

def d(x1, y1, x2, y2):
    return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5

def center(claster):
    min_sum = float("inf")
    for dot_center in claster:
        x_cntr, y_cntr = dot_center
        summ = 0
        for dot in claster:
            x, y = dot
            summ += d(x_cntr, y_cntr, x, y)
        if summ < min_sum:
            min_sum = summ
            ans = [x_cntr, y_cntr]
    return ans

f = open("27_4_B.txt")
claster1 = []
claster2 = []
claster3 = []
for st in f:
    st = st.replace(",", ".")
    x, y = map(float, st.split())
    if 1.9 < x < 6 and 1.5 < y < 5:
        claster1.append([x,y])
    elif y > 5 and x < 5:
        claster2.append([x,y])
    elif 7.5 < x < 11 and 2.5 < y < 6.5:
        claster3.append([x,y])
f.close()
print(len(claster1), len(claster2), len(claster3))
c1 = center(claster1)
c2 = center(claster2)
c3 = center(claster3)
px = (c1[0] + c2[0] + c3[0]) / 3
py = (c1[1] + c2[1] + c3[1]) / 3
print(int(px * 10000), int(py * 10000))

Ответ:

52076 47744

48778 49194

Ответ:
Показать решение
Бесплатный интенсив

Задача 7

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

Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных точек кластера минимальна. Для каждого кластера гарантируется единственность его центра. Расстояние между двумя точками на плоскости A(x1, y1) и B(x2, y2) вычисляется по формуле:

d(A, B) = √((x2 - x1)2 + (y2 - y1)2)

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

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

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

В ответе запишите четыре числа: в первой строке сначала целую часть произведения Px × 10 000, затем целую часть произведения Py × 10 000 для файла А, во второй строке – аналогичные данные для файла Б.

Решение
def d(x1, y1, x2, y2):
    return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5


def center(claster):
    min_sum = float("inf")
    for dot_center in claster:
        x_cntr, y_cntr = dot_center
        summ = 0
        for dot in claster:
            x, y = dot
            summ += d(x_cntr, y_cntr, x, y)
        if summ < min_sum:
            min_sum = summ
            ans = [x_cntr, y_cntr]
    return ans



f = open("demo_2025_27_А.txt")
claster1 = []
claster2 = []
for st in f:
    st = st.replace(",", ".")
    x, y = map(float, st.split())
    if y < 3:
        claster1.append([x, y])
    else:
        claster2.append([x, y])
f.close()
c1 = center(claster1)
c2 = center(claster2)
px = (c1[0] + c2[0]) / 2
py = (c1[1] + c2[1]) / 2
print(int(px * 10000), int(py * 10000))

Ответ:

10738 30730

37522 51277

Ответ:
Показать решение
Бесплатный интенсив

Задача 8

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

Аномалиями назовём точки, для которых расстояние до точек кластера превышает 1. При проведении вычислений с кластерами, аномалии нужно игнорировать.

Расстояние между двумя точками на плоскости A(x1, y1) и B(x2, y2) вычисляется по формуле:

d(A, B) = √((x2 - x1)2 + (y2 - y1)2)

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

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

Для каждого файла определите dmin - минимальное расстояние между двумя точками разных кластеров и dmax - максимальное расстояние между двумя точками разных кластеров.

В ответе запишите четыре числа: в первой строке сначала целую часть произведения dmin × 10 000, затем целую часть произведения dmax × 10 000 для файла А, во второй строке – аналогичные данные для файла Б.

Решение

Решение для файла А:

Первый кластер отделяется от второго и аномалии условием y < 5. Второй кластер отделяется от аномалии неравенством x > 4.

def d(x1, y1, x2, y2):
    return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5

def rasst(claster1, claster2):
    min_rasst = float("inf")
    max_rasst = 0
    for dot1 in claster1:
        for dot2 in claster2:
            r = d(dot1[0], dot1[1], dot2[0], dot2[1])
            if r < min_rasst:
                min_rasst = r
            if r > max_rasst:
                max_rasst = r
    return min_rasst, max_rasst

f = open("27_4_A.txt")
claster1 = []
claster2 = []
for st in f:
    st = st.replace(",", ".")
    x, y = map(float, st.split())
    if y < 5:
        claster1.append([x, y])
    elif x > 4:
        claster2.append([x, y])
f.close()
print(len(claster1), len(claster2))
min_r, max_r = rasst(claster1, claster2)
print(int(min_r * 10_000), int(max_r * 10_000))

Решение для файла В:

def d(x1, y1, x2, y2):
    return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5

def rasst(claster1, claster2, claster3):
    min_rasst = float("inf")
    max_rasst = 0
    for dot1 in claster1:
        for dot2 in claster2:
            r = d(dot1[0], dot1[1], dot2[0], dot2[1])
            if r < min_rasst:
                min_rasst = r
            if r > max_rasst:
                max_rasst = r
        for dot3 in claster3:
            r = d(dot1[0], dot1[1], dot3[0], dot3[1])
            if r < min_rasst:
                min_rasst = r
            if r > max_rasst:
                max_rasst = r
    for dot3 in claster3:
        for dot2 in claster2:
            r = d(dot3[0], dot3[1], dot2[0], dot2[1])
            if r < min_rasst:
                min_rasst = r
            if r > max_rasst:
                max_rasst = r
    return min_rasst, max_rasst

f = open("27_4_B.txt")
claster1 = []
claster2 = []
claster3 = []
for st in f:
    st = st.replace(",", ".")
    x, y = map(float, st.split())
    if 1.9 < x < 6 and 1.5 < y < 5:
        claster1.append([x,y])
    elif y > 5 and x < 5:
        claster2.append([x,y])
    elif 7.5 < x < 11 and 2.5 < y < 6.5:
        claster3.append([x,y])
f.close()
print(len(claster1), len(claster2), len(claster3))
min_r, max_r = rasst(claster1, claster2, claster3)
print(int(min_r * 10_000), int(max_r * 10_000))

Ответ:

40112 103021

20063 94283

Ответ:
Показать решение
Бесплатный интенсив

Задача 9

Имеется набор данных, состоящий из положительных целых чисел, все числа не превышают 10000. Количество чисел известно, но может быть очень велико. Необходимо найти количество пар, в которых произведение чисел кратно 14, а числа находятся на расстоянии не больше 10 (разность в индексах ≤ 10). Под парой подразумеваются два числа, расположенных на разных местах в наборе, порядок в паре неважен. Программа должна напечатать одно число - количество пар, соответствующее условиям задачи.

В качестве ответа прикрепите код решения, а также два числа - ответ для файла А и ответ для файла B.

Предупреждение: для обработки файла b не следует использовать переборный алгоритм, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.

Решение

Пример решения на Python:

f = open('fileB4.txt')
N = int(f.readline())
mas = []
kol = 0
for i in range(N):
    x = int(f.readline())
    for y in mas:
        if x * y % 14 == 0:
            kol += 1
    if len(mas) >= 10:
        mas.pop(0)
    mas.append(x)
print(kol)
f.close()

Для прикреплённого файла A программа выведет: 173

Для прикреплённого файла B программа выведет: 198081

Ответ:
Показать решение
Бесплатный интенсив
Показать еще
  • Без воды
  • Ламповая атмосфера
  • Крутые преподаватели

ЕГЭ 2026: бесплатный курс
по информатике

На бесплатном демо-курсе ты:
  • Узнаешь как кодируется изображение
  • Поймешь как решать 7 номер ЕГЭ
  • Разберешься с паролями
  • Потренируешь 11 и 4 номер ЕГЭ
Получи бесплатный демо-доступ
Оставь заявку и займи место
на бесплатном курсе Турбо ЕГЭ
Нажимая на кнопку «Отправить», вы принимаете положение об обработке персональных данных.