ЕГЭ по информатике · задание 27

Кластеризация: центры кластеров

Точки на плоскости образуют несколько кластеров, в файле Б есть аномалии. Нужно разбить точки на кластеры, найти центр каждого и посчитать по центрам требуемые величины. К каждому варианту — файлы А и Б.

План решения

  1. Построить точечную диаграмму и увидеть кластеры и аномалии.
  2. Разбить точки на кластеры: по расстоянию до приблизительного центра или по прямым-разделителям.
  3. В каждом кластере найти точку с наименьшей суммой расстояний.
  4. Посчитать нужные числа и взять целую часть от ×10 000.

Python

  • from math import dist — расстояние между точками.
  • min(cl, key=lambda p: sum(dist(p, q) for q in cl)) — центр кластера.
  • int(abs(x) * 10000) — целая часть модуля.

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

  • Взять среднее арифметическое точек вместо точки кластера.
  • Оставить аномалии в кластере.
  • Перепутать порядок чисел в строках ответа.

Разобранные варианты

Сначала реши сам, потом открой разбор. В разборе — программа и шаги с промежуточными значениями.

Вариант 1

А: минимумы · Б: Q1, Q2

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

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

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

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

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

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

Файлы к варианту: Ege27_v1_A.txt (611 точек), Ege27_v1_B.txt (6690 точек).

Посмотреть точки на графике

Файл А

Файл Б

Разбор

Шаг 1. Смотрим на точки. На графике (Excel: точечная диаграмма; или matplotlib) хорошо видны отдельные «облака». Приблизительные центры облаков в файле А: (10; -14), (11; 12); в файле Б: (-2; -2), (-17; 17), (9; -9). В файле Б три одиночные точки далеко от облаков — аномалии.

Шаг 2. Разбиваем на кластеры. Точка относится к облаку, если она ближе 5,5 к его приблизительному центру: половина диагонали прямоугольника меньше 4,5 (с учётом округления центра — меньше 5,5), а облака отстоят друг от друга больше чем на 13. Аномалии ни к одному облаку не попадают.

Шаг 3. Центры. Для каждой точки кластера считаем сумму расстояний до остальных и берём точку с наименьшей суммой. Файл А: (9.684368; -14.300019), (11.082319; 12.254768). Файл Б: (-1.95178; -2.064085), (-16.962641; 17.000128), (8.94468; -8.988383) (кластеры из 2489, 2126, 2072 точек).

Шаг 4. Px = 9.684368, Py = -14.300019; Q1 = 12.910412, Q2 = 3.465574. Ответ: 96843 143000 и 129104 34655.

Ответ: 96843 143000; 129104 34655

Решение на Python. Положите оба файла рядом с программой. Центр большого кластера ищется перебором всех пар точек — на файле Б программа работает до минуты.

from math import dist

def read(name):
    return [tuple(map(float, line.split())) for line in open(name) if line.strip()]

def split(points, centers, r=5.5):
    """Точка относится к кластеру, если она ближе r к его приблизительному центру (центры видны на графике)."""
    clusters = [[] for _ in centers]
    for p in points:
        for i, c in enumerate(centers):
            if dist(p, c) <= r:
                clusters[i].append(p)
                break                              # аномалии не попадают ни в один кластер
    return clusters

def center(cl):                                     # точка с наименьшей суммой расстояний до остальных
    return min(cl, key=lambda p: sum(dist(p, q) for q in cl))

# файл А
A = split(read('Ege27_v1_A.txt'), [(10, -14), (11, 12)])
cA = [center(cl) for cl in A]
px = min(c[0] for c in cA)
py = min(c[1] for c in cA)
print(int(abs(px) * 10000), int(abs(py) * 10000))
# файл Б
B = split(read('Ege27_v1_B.txt'), [(-2, -2), (-17, 17), (9, -9)])
cB = [center(cl) for cl in B]
small = min(range(len(B)), key=lambda i: len(B[i]))
large = max(range(len(B)), key=lambda i: len(B[i]))
q1 = dist(cB[small], cB[large])
q2 = max(dist(cB[i], p) for i in range(len(B)) for p in B[i])
print(int(q1 * 10000), int(q2 * 10000))

Вариант 2

А: средние · Б: Q1, Q2

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

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

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

В файле Б хранятся координаты точек трёх кластеров, где H = 6, W = 5 для каждого кластера. Количество точек не превышает 10 000. Структура хранения информации в файле Б аналогична файлу А. Известно, что в файле Б имеются координаты ровно трёх «лишних» точек, представляющих аномалии, которые возникли в результате помех при передаче данных. Эти три точки не относятся ни к одному из кластеров, их учитывать не нужно.

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

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

Файлы к варианту: Ege27_v2_A.txt (698 точек), Ege27_v2_B.txt (6209 точек).

Посмотреть точки на графике

Файл А

Файл Б

Разбор

Шаг 1. Смотрим на точки. На графике (Excel: точечная диаграмма; или matplotlib) хорошо видны отдельные «облака». Приблизительные центры облаков в файле А: (-6; 19), (2; 4); в файле Б: (19; 5), (-7; 19), (3; -14). В файле Б три одиночные точки далеко от облаков — аномалии.

Шаг 2. Разбиваем на кластеры. Точка относится к облаку, если она ближе 5,5 к его приблизительному центру: половина диагонали прямоугольника меньше 4,5 (с учётом округления центра — меньше 5,5), а облака отстоят друг от друга больше чем на 13. Аномалии ни к одному облаку не попадают.

Шаг 3. Центры. Для каждой точки кластера считаем сумму расстояний до остальных и берём точку с наименьшей суммой. Файл А: (-6.007522; 19.134121), (2.186423; 4.032598). Файл Б: (18.948054; 4.882227), (-6.962797; 18.971783), (2.994917; -14.125646) (кластеры из 1431, 2228, 2547 точек).

Шаг 4. Px = -1.910549, Py = 11.583360; Q1 = 24.815354, Q2 = 3.886431. Ответ: 19105 115833 и 248153 38864.

Ответ: 19105 115833; 248153 38864

Решение на Python. Положите оба файла рядом с программой. Центр большого кластера ищется перебором всех пар точек — на файле Б программа работает до минуты.

from math import dist

def read(name):
    return [tuple(map(float, line.split())) for line in open(name) if line.strip()]

def split(points, centers, r=5.5):
    """Точка относится к кластеру, если она ближе r к его приблизительному центру (центры видны на графике)."""
    clusters = [[] for _ in centers]
    for p in points:
        for i, c in enumerate(centers):
            if dist(p, c) <= r:
                clusters[i].append(p)
                break                              # аномалии не попадают ни в один кластер
    return clusters

def center(cl):                                     # точка с наименьшей суммой расстояний до остальных
    return min(cl, key=lambda p: sum(dist(p, q) for q in cl))

# файл А
A = split(read('Ege27_v2_A.txt'), [(-6, 19), (2, 4)])
cA = [center(cl) for cl in A]
px = sum(c[0] for c in cA) / len(cA)
py = sum(c[1] for c in cA) / len(cA)
print(int(abs(px) * 10000), int(abs(py) * 10000))
# файл Б
B = split(read('Ege27_v2_B.txt'), [(19, 5), (-7, 19), (3, -14)])
cB = [center(cl) for cl in B]
small = min(range(len(B)), key=lambda i: len(B[i]))
large = max(range(len(B)), key=lambda i: len(B[i]))
q1 = dist(cB[small], cB[large])
q2 = max(dist(cB[i], p) for i in range(len(B)) for p in B[i])
print(int(q1 * 10000), int(q2 * 10000))

Вариант 3

А: минимумы · Б: максимумы

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

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

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

В файле Б хранятся координаты точек трёх кластеров, где H = 6, W = 4 для каждого кластера. Количество точек не превышает 10 000. Структура хранения информации в файле Б аналогична файлу А. Известно, что в файле Б имеются координаты ровно трёх «лишних» точек, представляющих аномалии, которые возникли в результате помех при передаче данных. Эти три точки не относятся ни к одному из кластеров, их учитывать не нужно.

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

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

Файлы к варианту: Ege27_v3_A.txt (688 точек), Ege27_v3_B.txt (5802 точек).

Посмотреть точки на графике

Файл А

Файл Б

Разбор

Шаг 1. Смотрим на точки. На графике (Excel: точечная диаграмма; или matplotlib) хорошо видны отдельные «облака». Приблизительные центры облаков в файле А: (4; 3), (-15; 19); в файле Б: (6; -12), (-5; 4), (-20; 14). В файле Б три одиночные точки далеко от облаков — аномалии.

Шаг 2. Разбиваем на кластеры. Точка относится к облаку, если она ближе 5,5 к его приблизительному центру: половина диагонали прямоугольника меньше 4,5 (с учётом округления центра — меньше 5,5), а облака отстоят друг от друга больше чем на 13. Аномалии ни к одному облаку не попадают.

Шаг 3. Центры. Для каждой точки кластера считаем сумму расстояний до остальных и берём точку с наименьшей суммой. Файл А: (4.119769; 3.02272), (-14.973682; 18.882438). Файл Б: (6.006369; -12.068254), (-4.983151; 3.915273), (-20.013704; 14.012447) (кластеры из 1761, 1814, 2224 точек).

Шаг 4. Px = -14.973682, Py = 3.022720; Q1 = 6.006369, Q2 = 14.012447. Ответ: 149736 30227 и 60063 140124.

Ответ: 149736 30227; 60063 140124

Решение на Python. Положите оба файла рядом с программой. Центр большого кластера ищется перебором всех пар точек — на файле Б программа работает до минуты.

from math import dist

def read(name):
    return [tuple(map(float, line.split())) for line in open(name) if line.strip()]

def split(points, centers, r=5.5):
    """Точка относится к кластеру, если она ближе r к его приблизительному центру (центры видны на графике)."""
    clusters = [[] for _ in centers]
    for p in points:
        for i, c in enumerate(centers):
            if dist(p, c) <= r:
                clusters[i].append(p)
                break                              # аномалии не попадают ни в один кластер
    return clusters

def center(cl):                                     # точка с наименьшей суммой расстояний до остальных
    return min(cl, key=lambda p: sum(dist(p, q) for q in cl))

# файл А
A = split(read('Ege27_v3_A.txt'), [(4, 3), (-15, 19)])
cA = [center(cl) for cl in A]
px = min(c[0] for c in cA)
py = min(c[1] for c in cA)
print(int(abs(px) * 10000), int(abs(py) * 10000))
# файл Б
B = split(read('Ege27_v3_B.txt'), [(6, -12), (-5, 4), (-20, 14)])
cB = [center(cl) for cl in B]
q1 = max(c[0] for c in cB)
q2 = max(c[1] for c in cB)
print(int(abs(q1) * 10000), int(abs(q2) * 10000))

Вариант 4

А: минимумы · Б: Q1, Q2

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

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

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

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

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

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

Файлы к варианту: Ege27_v4_A.txt (632 точек), Ege27_v4_B.txt (4335 точек).

Посмотреть точки на графике

Файл А

Файл Б

Разбор

Шаг 1. Смотрим на точки. На графике (Excel: точечная диаграмма; или matplotlib) хорошо видны отдельные «облака». Приблизительные центры облаков в файле А: (-2; -7), (-12; 11); в файле Б: (-7; -3), (20; -14), (16; 19). В файле Б три одиночные точки далеко от облаков — аномалии.

Шаг 2. Разбиваем на кластеры. Точка относится к облаку, если она ближе 5,5 к его приблизительному центру: половина диагонали прямоугольника меньше 4,5 (с учётом округления центра — меньше 5,5), а облака отстоят друг от друга больше чем на 13. Аномалии ни к одному облаку не попадают.

Шаг 3. Центры. Для каждой точки кластера считаем сумму расстояний до остальных и берём точку с наименьшей суммой. Файл А: (-2.05727; -6.953932), (-11.944401; 10.959684). Файл Б: (-7.047355; -3.044533), (19.952414; -14.010139), (16.027984; 19.110465) (кластеры из 1622, 1424, 1286 точек).

Шаг 4. Px = -11.944401, Py = -6.953932; Q1 = 31.989298, Q2 = 3.513298. Ответ: 119444 69539 и 319892 35132.

Ответ: 119444 69539; 319892 35132

Решение на Python. Положите оба файла рядом с программой. Центр большого кластера ищется перебором всех пар точек — на файле Б программа работает до минуты.

from math import dist

def read(name):
    return [tuple(map(float, line.split())) for line in open(name) if line.strip()]

def split(points, centers, r=5.5):
    """Точка относится к кластеру, если она ближе r к его приблизительному центру (центры видны на графике)."""
    clusters = [[] for _ in centers]
    for p in points:
        for i, c in enumerate(centers):
            if dist(p, c) <= r:
                clusters[i].append(p)
                break                              # аномалии не попадают ни в один кластер
    return clusters

def center(cl):                                     # точка с наименьшей суммой расстояний до остальных
    return min(cl, key=lambda p: sum(dist(p, q) for q in cl))

# файл А
A = split(read('Ege27_v4_A.txt'), [(-2, -7), (-12, 11)])
cA = [center(cl) for cl in A]
px = min(c[0] for c in cA)
py = min(c[1] for c in cA)
print(int(abs(px) * 10000), int(abs(py) * 10000))
# файл Б
B = split(read('Ege27_v4_B.txt'), [(-7, -3), (20, -14), (16, 19)])
cB = [center(cl) for cl in B]
small = min(range(len(B)), key=lambda i: len(B[i]))
large = max(range(len(B)), key=lambda i: len(B[i]))
q1 = dist(cB[small], cB[large])
q2 = max(dist(cB[i], p) for i in range(len(B)) for p in B[i])
print(int(q1 * 10000), int(q2 * 10000))

Вариант 5

А: средние · Б: максимумы

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

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

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

В файле Б хранятся координаты точек трёх кластеров, где H = 6, W = 5 для каждого кластера. Количество точек не превышает 10 000. Структура хранения информации в файле Б аналогична файлу А. Известно, что в файле Б имеются координаты ровно трёх «лишних» точек, представляющих аномалии, которые возникли в результате помех при передаче данных. Эти три точки не относятся ни к одному из кластеров, их учитывать не нужно.

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

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

Файлы к варианту: Ege27_v5_A.txt (860 точек), Ege27_v5_B.txt (5392 точек).

Посмотреть точки на графике

Файл А

Файл Б

Разбор

Шаг 1. Смотрим на точки. На графике (Excel: точечная диаграмма; или matplotlib) хорошо видны отдельные «облака». Приблизительные центры облаков в файле А: (-14; 8), (9; -4); в файле Б: (13; 6), (2; 13), (-14; 9). В файле Б три одиночные точки далеко от облаков — аномалии.

Шаг 2. Разбиваем на кластеры. Точка относится к облаку, если она ближе 5,5 к его приблизительному центру: половина диагонали прямоугольника меньше 4,5 (с учётом округления центра — меньше 5,5), а облака отстоят друг от друга больше чем на 13. Аномалии ни к одному облаку не попадают.

Шаг 3. Центры. Для каждой точки кластера считаем сумму расстояний до остальных и берём точку с наименьшей суммой. Файл А: (-14.120538; 7.993808), (9.10443; -3.875835). Файл Б: (13.04104; 6.220061), (2.03562; 12.996111), (-13.968673; 8.967821) (кластеры из 1664, 1292, 2433 точек).

Шаг 4. Px = -2.508054, Py = 2.058986; Q1 = 13.041040, Q2 = 12.996111. Ответ: 25080 20589 и 130410 129961.

Ответ: 25080 20589; 130410 129961

Решение на Python. Положите оба файла рядом с программой. Центр большого кластера ищется перебором всех пар точек — на файле Б программа работает до минуты.

from math import dist

def read(name):
    return [tuple(map(float, line.split())) for line in open(name) if line.strip()]

def split(points, centers, r=5.5):
    """Точка относится к кластеру, если она ближе r к его приблизительному центру (центры видны на графике)."""
    clusters = [[] for _ in centers]
    for p in points:
        for i, c in enumerate(centers):
            if dist(p, c) <= r:
                clusters[i].append(p)
                break                              # аномалии не попадают ни в один кластер
    return clusters

def center(cl):                                     # точка с наименьшей суммой расстояний до остальных
    return min(cl, key=lambda p: sum(dist(p, q) for q in cl))

# файл А
A = split(read('Ege27_v5_A.txt'), [(-14, 8), (9, -4)])
cA = [center(cl) for cl in A]
px = sum(c[0] for c in cA) / len(cA)
py = sum(c[1] for c in cA) / len(cA)
print(int(abs(px) * 10000), int(abs(py) * 10000))
# файл Б
B = split(read('Ege27_v5_B.txt'), [(13, 6), (2, 13), (-14, 9)])
cB = [center(cl) for cl in B]
q1 = max(c[0] for c in cB)
q2 = max(c[1] for c in cB)
print(int(abs(q1) * 10000), int(abs(q2) * 10000))

Вариант 6

А: минимумы · Б: Q1, Q2

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

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

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

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

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

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

Файлы к варианту: Ege27_v6_A.txt (703 точек), Ege27_v6_B.txt (6672 точек).

Посмотреть точки на графике

Файл А

Файл Б

Разбор

Шаг 1. Смотрим на точки. На графике (Excel: точечная диаграмма; или matplotlib) хорошо видны отдельные «облака». Приблизительные центры облаков в файле А: (-2; -1), (13; -20); в файле Б: (18; 5), (-7; -17), (-17; -3). В файле Б три одиночные точки далеко от облаков — аномалии.

Шаг 2. Разбиваем на кластеры. Точка относится к облаку, если она ближе 5,5 к его приблизительному центру: половина диагонали прямоугольника меньше 4,5 (с учётом округления центра — меньше 5,5), а облака отстоят друг от друга больше чем на 13. Аномалии ни к одному облаку не попадают.

Шаг 3. Центры. Для каждой точки кластера считаем сумму расстояний до остальных и берём точку с наименьшей суммой. Файл А: (-1.86106; -0.971589), (13.053349; -19.939509). Файл Б: (17.917567; 5.016471), (-6.98507; -16.961458), (-17.058833; -3.052549) (кластеры из 2517, 2429, 1723 точек).

Шаг 4. Px = -1.861060, Py = -19.939509; Q1 = 35.895092, Q2 = 3.472372. Ответ: 18610 199395 и 358950 34723.

Ответ: 18610 199395; 358950 34723

Решение на Python. Положите оба файла рядом с программой. Центр большого кластера ищется перебором всех пар точек — на файле Б программа работает до минуты.

from math import dist

def read(name):
    return [tuple(map(float, line.split())) for line in open(name) if line.strip()]

def split(points, centers, r=5.5):
    """Точка относится к кластеру, если она ближе r к его приблизительному центру (центры видны на графике)."""
    clusters = [[] for _ in centers]
    for p in points:
        for i, c in enumerate(centers):
            if dist(p, c) <= r:
                clusters[i].append(p)
                break                              # аномалии не попадают ни в один кластер
    return clusters

def center(cl):                                     # точка с наименьшей суммой расстояний до остальных
    return min(cl, key=lambda p: sum(dist(p, q) for q in cl))

# файл А
A = split(read('Ege27_v6_A.txt'), [(-2, -1), (13, -20)])
cA = [center(cl) for cl in A]
px = min(c[0] for c in cA)
py = min(c[1] for c in cA)
print(int(abs(px) * 10000), int(abs(py) * 10000))
# файл Б
B = split(read('Ege27_v6_B.txt'), [(18, 5), (-7, -17), (-17, -3)])
cB = [center(cl) for cl in B]
small = min(range(len(B)), key=lambda i: len(B[i]))
large = max(range(len(B)), key=lambda i: len(B[i]))
q1 = dist(cB[small], cB[large])
q2 = max(dist(cB[i], p) for i in range(len(B)) for p in B[i])
print(int(q1 * 10000), int(q2 * 10000))

Вариант 7

А: средние · Б: Q1, Q2

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

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

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

В файле Б хранятся координаты точек трёх кластеров, где H = 6, W = 5 для каждого кластера. Количество точек не превышает 10 000. Структура хранения информации в файле Б аналогична файлу А. Известно, что в файле Б имеются координаты ровно трёх «лишних» точек, представляющих аномалии, которые возникли в результате помех при передаче данных. Эти три точки не относятся ни к одному из кластеров, их учитывать не нужно.

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

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

Файлы к варианту: Ege27_v7_A.txt (740 точек), Ege27_v7_B.txt (5140 точек).

Посмотреть точки на графике

Файл А

Файл Б

Разбор

Шаг 1. Смотрим на точки. На графике (Excel: точечная диаграмма; или matplotlib) хорошо видны отдельные «облака». Приблизительные центры облаков в файле А: (3; 12), (8; -11); в файле Б: (7; -8), (-6; -8), (-5; 19). В файле Б три одиночные точки далеко от облаков — аномалии.

Шаг 2. Разбиваем на кластеры. Точка относится к облаку, если она ближе 5,5 к его приблизительному центру: половина диагонали прямоугольника меньше 4,5 (с учётом округления центра — меньше 5,5), а облака отстоят друг от друга больше чем на 13. Аномалии ни к одному облаку не попадают.

Шаг 3. Центры. Для каждой точки кластера считаем сумму расстояний до остальных и берём точку с наименьшей суммой. Файл А: (3.093344; 11.938573), (7.780346; -10.993515). Файл Б: (7.020828; -8.076731), (-6.123744; -8.127798), (-5.014989; 19.082448) (кластеры из 1585, 1755, 1797 точек).

Шаг 4. Px = 5.436845, Py = 0.472529; Q1 = 29.706597, Q2 = 3.879003. Ответ: 54368 4725 и 297065 38790.

Ответ: 54368 4725; 297065 38790

Решение на Python. Положите оба файла рядом с программой. Центр большого кластера ищется перебором всех пар точек — на файле Б программа работает до минуты.

from math import dist

def read(name):
    return [tuple(map(float, line.split())) for line in open(name) if line.strip()]

def split(points, centers, r=5.5):
    """Точка относится к кластеру, если она ближе r к его приблизительному центру (центры видны на графике)."""
    clusters = [[] for _ in centers]
    for p in points:
        for i, c in enumerate(centers):
            if dist(p, c) <= r:
                clusters[i].append(p)
                break                              # аномалии не попадают ни в один кластер
    return clusters

def center(cl):                                     # точка с наименьшей суммой расстояний до остальных
    return min(cl, key=lambda p: sum(dist(p, q) for q in cl))

# файл А
A = split(read('Ege27_v7_A.txt'), [(3, 12), (8, -11)])
cA = [center(cl) for cl in A]
px = sum(c[0] for c in cA) / len(cA)
py = sum(c[1] for c in cA) / len(cA)
print(int(abs(px) * 10000), int(abs(py) * 10000))
# файл Б
B = split(read('Ege27_v7_B.txt'), [(7, -8), (-6, -8), (-5, 19)])
cB = [center(cl) for cl in B]
small = min(range(len(B)), key=lambda i: len(B[i]))
large = max(range(len(B)), key=lambda i: len(B[i]))
q1 = dist(cB[small], cB[large])
q2 = max(dist(cB[i], p) for i in range(len(B)) for p in B[i])
print(int(q1 * 10000), int(q2 * 10000))

Вариант 8

А: минимумы · Б: Q1, Q2

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

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

В файле А хранятся координаты точек двух кластеров, где H = 5 и W = 4 для каждого кластера. В каждой строке записана информация о расположении на карте одной звезды: сначала координата x, затем координата y (через пробел, дробная часть отделена точкой). Количество точек не превышает 1000.

В файле Б хранятся координаты точек трёх кластеров, где H = 7, W = 5 для каждого кластера. Количество точек не превышает 10 000. Структура хранения информации в файле Б аналогична файлу А. Известно, что в файле Б имеются координаты ровно трёх «лишних» точек, представляющих аномалии, которые возникли в результате помех при передаче данных. Эти три точки не относятся ни к одному из кластеров, их учитывать не нужно.

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

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

Файлы к варианту: Ege27_v8_A.txt (644 точек), Ege27_v8_B.txt (6396 точек).

Посмотреть точки на графике

Файл А

Файл Б

Разбор

Шаг 1. Смотрим на точки. На графике (Excel: точечная диаграмма; или matplotlib) хорошо видны отдельные «облака». Приблизительные центры облаков в файле А: (3; 9), (8; -17); в файле Б: (0; 12), (-1; -10), (8; 0). В файле Б три одиночные точки далеко от облаков — аномалии.

Шаг 2. Разбиваем на кластеры. Точка относится к облаку, если она ближе 5,5 к его приблизительному центру: половина диагонали прямоугольника меньше 4,5 (с учётом округления центра — меньше 5,5), а облака отстоят друг от друга больше чем на 13. Аномалии ни к одному облаку не попадают.

Шаг 3. Центры. Для каждой точки кластера считаем сумму расстояний до остальных и берём точку с наименьшей суммой. Файл А: (3.000182; 8.943695), (7.891356; -16.903019). Файл Б: (-0.085996; 12.004882), (-0.9393; -9.946848), (8.104071; 0.028452) (кластеры из 1436, 2387, 2570 точек).

Шаг 4. Px = 3.000182, Py = -16.903019; Q1 = 14.509034, Q2 = 4.202070. Ответ: 30001 169030 и 145090 42020.

Ответ: 30001 169030; 145090 42020

Решение на Python. Положите оба файла рядом с программой. Центр большого кластера ищется перебором всех пар точек — на файле Б программа работает до минуты.

from math import dist

def read(name):
    return [tuple(map(float, line.split())) for line in open(name) if line.strip()]

def split(points, centers, r=5.5):
    """Точка относится к кластеру, если она ближе r к его приблизительному центру (центры видны на графике)."""
    clusters = [[] for _ in centers]
    for p in points:
        for i, c in enumerate(centers):
            if dist(p, c) <= r:
                clusters[i].append(p)
                break                              # аномалии не попадают ни в один кластер
    return clusters

def center(cl):                                     # точка с наименьшей суммой расстояний до остальных
    return min(cl, key=lambda p: sum(dist(p, q) for q in cl))

# файл А
A = split(read('Ege27_v8_A.txt'), [(3, 9), (8, -17)])
cA = [center(cl) for cl in A]
px = min(c[0] for c in cA)
py = min(c[1] for c in cA)
print(int(abs(px) * 10000), int(abs(py) * 10000))
# файл Б
B = split(read('Ege27_v8_B.txt'), [(0, 12), (-1, -10), (8, 0)])
cB = [center(cl) for cl in B]
small = min(range(len(B)), key=lambda i: len(B[i]))
large = max(range(len(B)), key=lambda i: len(B[i]))
q1 = dist(cB[small], cB[large])
q2 = max(dist(cB[i], p) for i in range(len(B)) for p in B[i])
print(int(q1 * 10000), int(q2 * 10000))

Вариант 9

А: средние · Б: максимумы

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

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

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

В файле Б хранятся координаты точек трёх кластеров, где H = 7, W = 5 для каждого кластера. Количество точек не превышает 10 000. Структура хранения информации в файле Б аналогична файлу А. Известно, что в файле Б имеются координаты ровно трёх «лишних» точек, представляющих аномалии, которые возникли в результате помех при передаче данных. Эти три точки не относятся ни к одному из кластеров, их учитывать не нужно.

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

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

Файлы к варианту: Ege27_v9_A.txt (654 точек), Ege27_v9_B.txt (6221 точек).

Посмотреть точки на графике

Файл А

Файл Б

Разбор

Шаг 1. Смотрим на точки. На графике (Excel: точечная диаграмма; или matplotlib) хорошо видны отдельные «облака». Приблизительные центры облаков в файле А: (11; 15), (5; -7); в файле Б: (-13; 12), (-4; -14), (6; -3). В файле Б три одиночные точки далеко от облаков — аномалии.

Шаг 2. Разбиваем на кластеры. Точка относится к облаку, если она ближе 5,5 к его приблизительному центру: половина диагонали прямоугольника меньше 4,5 (с учётом округления центра — меньше 5,5), а облака отстоят друг от друга больше чем на 13. Аномалии ни к одному облаку не попадают.

Шаг 3. Центры. Для каждой точки кластера считаем сумму расстояний до остальных и берём точку с наименьшей суммой. Файл А: (10.825708; 14.842694), (4.957194; -7.109739). Файл Б: (-12.852089; 12.052654), (-4.009311; -13.931792), (6.070871; -3.067135) (кластеры из 2299, 1682, 2237 точек).

Шаг 4. Px = 7.891451, Py = 3.866477; Q1 = 6.070871, Q2 = 12.052654. Ответ: 78914 38664 и 60708 120526.

Ответ: 78914 38664; 60708 120526

Решение на Python. Положите оба файла рядом с программой. Центр большого кластера ищется перебором всех пар точек — на файле Б программа работает до минуты.

from math import dist

def read(name):
    return [tuple(map(float, line.split())) for line in open(name) if line.strip()]

def split(points, centers, r=5.5):
    """Точка относится к кластеру, если она ближе r к его приблизительному центру (центры видны на графике)."""
    clusters = [[] for _ in centers]
    for p in points:
        for i, c in enumerate(centers):
            if dist(p, c) <= r:
                clusters[i].append(p)
                break                              # аномалии не попадают ни в один кластер
    return clusters

def center(cl):                                     # точка с наименьшей суммой расстояний до остальных
    return min(cl, key=lambda p: sum(dist(p, q) for q in cl))

# файл А
A = split(read('Ege27_v9_A.txt'), [(11, 15), (5, -7)])
cA = [center(cl) for cl in A]
px = sum(c[0] for c in cA) / len(cA)
py = sum(c[1] for c in cA) / len(cA)
print(int(abs(px) * 10000), int(abs(py) * 10000))
# файл Б
B = split(read('Ege27_v9_B.txt'), [(-13, 12), (-4, -14), (6, -3)])
cB = [center(cl) for cl in B]
q1 = max(c[0] for c in cB)
q2 = max(c[1] for c in cB)
print(int(abs(q1) * 10000), int(abs(q2) * 10000))

Вариант 10

А: минимумы · Б: Q1, Q2

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

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

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

В файле Б хранятся координаты точек трёх кластеров, где H = 7, W = 5 для каждого кластера. Количество точек не превышает 10 000. Структура хранения информации в файле Б аналогична файлу А. Известно, что в файле Б имеются координаты ровно трёх «лишних» точек, представляющих аномалии, которые возникли в результате помех при передаче данных. Эти три точки не относятся ни к одному из кластеров, их учитывать не нужно.

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

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

Файлы к варианту: Ege27_v10_A.txt (704 точек), Ege27_v10_B.txt (5126 точек).

Посмотреть точки на графике

Файл А

Файл Б

Разбор

Шаг 1. Смотрим на точки. На графике (Excel: точечная диаграмма; или matplotlib) хорошо видны отдельные «облака». Приблизительные центры облаков в файле А: (20; 18), (-4; 0); в файле Б: (8; -13), (20; 3), (-7; 1). В файле Б три одиночные точки далеко от облаков — аномалии.

Шаг 2. Разбиваем на кластеры. Точка относится к облаку, если она ближе 5,5 к его приблизительному центру: половина диагонали прямоугольника меньше 4,5 (с учётом округления центра — меньше 5,5), а облака отстоят друг от друга больше чем на 13. Аномалии ни к одному облаку не попадают.

Шаг 3. Центры. Для каждой точки кластера считаем сумму расстояний до остальных и берём точку с наименьшей суммой. Файл А: (19.80319; 17.99417), (-3.733269; 0.132441). Файл Б: (8.044138; -12.886093), (20.023149; 2.960538), (-7.00188; 0.880771) (кластеры из 1557, 1310, 2256 точек).

Шаг 4. Px = -3.733269, Py = 0.132441; Q1 = 27.104937, Q2 = 4.212190. Ответ: 37332 1324 и 271049 42121.

Ответ: 37332 1324; 271049 42121

Решение на Python. Положите оба файла рядом с программой. Центр большого кластера ищется перебором всех пар точек — на файле Б программа работает до минуты.

from math import dist

def read(name):
    return [tuple(map(float, line.split())) for line in open(name) if line.strip()]

def split(points, centers, r=5.5):
    """Точка относится к кластеру, если она ближе r к его приблизительному центру (центры видны на графике)."""
    clusters = [[] for _ in centers]
    for p in points:
        for i, c in enumerate(centers):
            if dist(p, c) <= r:
                clusters[i].append(p)
                break                              # аномалии не попадают ни в один кластер
    return clusters

def center(cl):                                     # точка с наименьшей суммой расстояний до остальных
    return min(cl, key=lambda p: sum(dist(p, q) for q in cl))

# файл А
A = split(read('Ege27_v10_A.txt'), [(20, 18), (-4, 0)])
cA = [center(cl) for cl in A]
px = min(c[0] for c in cA)
py = min(c[1] for c in cA)
print(int(abs(px) * 10000), int(abs(py) * 10000))
# файл Б
B = split(read('Ege27_v10_B.txt'), [(8, -13), (20, 3), (-7, 1)])
cB = [center(cl) for cl in B]
small = min(range(len(B)), key=lambda i: len(B[i]))
large = max(range(len(B)), key=lambda i: len(B[i]))
q1 = dist(cB[small], cB[large])
q2 = max(dist(cB[i], p) for i in range(len(B)) for p in B[i])
print(int(q1 * 10000), int(q2 * 10000))

Для самостоятельного решения

Варианты 11–15 без разборов. Ответ можно проверить кнопкой.

Вариант 11

А: минимумы · Б: Q1, Q2

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

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

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

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

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

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

Файлы к варианту: Ege27_v11_A.txt (645 точек), Ege27_v11_B.txt (5267 точек).

Посмотреть точки на графике

Файл А

Файл Б

Вариант 12

А: средние · Б: Q1, Q2

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

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

В файле А хранятся координаты точек двух кластеров, где H = 5 и W = 4 для каждого кластера. В каждой строке записана информация о расположении на карте одной звезды: сначала координата x, затем координата y (через пробел, дробная часть отделена точкой). Количество точек не превышает 1000.

В файле Б хранятся координаты точек трёх кластеров, где H = 6, W = 5 для каждого кластера. Количество точек не превышает 10 000. Структура хранения информации в файле Б аналогична файлу А. Известно, что в файле Б имеются координаты ровно трёх «лишних» точек, представляющих аномалии, которые возникли в результате помех при передаче данных. Эти три точки не относятся ни к одному из кластеров, их учитывать не нужно.

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

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

Файлы к варианту: Ege27_v12_A.txt (818 точек), Ege27_v12_B.txt (5027 точек).

Посмотреть точки на графике

Файл А

Файл Б

Вариант 13

А: минимумы · Б: максимумы

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

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

В файле А хранятся координаты точек двух кластеров, где H = 5 и W = 4 для каждого кластера. В каждой строке записана информация о расположении на карте одной звезды: сначала координата x, затем координата y (через пробел, дробная часть отделена точкой). Количество точек не превышает 1000.

В файле Б хранятся координаты точек трёх кластеров, где H = 7, W = 5 для каждого кластера. Количество точек не превышает 10 000. Структура хранения информации в файле Б аналогична файлу А. Известно, что в файле Б имеются координаты ровно трёх «лишних» точек, представляющих аномалии, которые возникли в результате помех при передаче данных. Эти три точки не относятся ни к одному из кластеров, их учитывать не нужно.

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

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

Файлы к варианту: Ege27_v13_A.txt (686 точек), Ege27_v13_B.txt (5586 точек).

Посмотреть точки на графике

Файл А

Файл Б

Вариант 14

А: средние · Б: Q1, Q2

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

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

В файле А хранятся координаты точек двух кластеров, где H = 5 и W = 4 для каждого кластера. В каждой строке записана информация о расположении на карте одной звезды: сначала координата x, затем координата y (через пробел, дробная часть отделена точкой). Количество точек не превышает 1000.

В файле Б хранятся координаты точек трёх кластеров, где H = 7, W = 5 для каждого кластера. Количество точек не превышает 10 000. Структура хранения информации в файле Б аналогична файлу А. Известно, что в файле Б имеются координаты ровно трёх «лишних» точек, представляющих аномалии, которые возникли в результате помех при передаче данных. Эти три точки не относятся ни к одному из кластеров, их учитывать не нужно.

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

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

Файлы к варианту: Ege27_v14_A.txt (730 точек), Ege27_v14_B.txt (4224 точек).

Посмотреть точки на графике

Файл А

Файл Б

Вариант 15

А: минимумы · Б: Q1, Q2

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

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

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

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

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

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

Файлы к варианту: Ege27_v15_A.txt (665 точек), Ege27_v15_B.txt (4420 точек).

Посмотреть точки на графике

Файл А

Файл Б