1

1

дней

1

1

часов

1

1

минут

1

1

секунд

Осталось всего XXXX мест из XXXX!

XXX

Выбрать курс
Мы используем файлы cookie. К сайту подключен сервис Яндекс.Метрика, который также использует файлы cookie. Продолжая использование сайта, вы принимаете условия его использования в соответствии с Политикой обработки персональных данных и Согласием на обработку персональных данных.
ОК

Ответы на ЕГЭ по информатике 2026: реальные варианты с Дальнего Востока

19 мин.

Ответы ЕГЭ информатика

ЕГЭ по информатике в 2026 году проходит в два дня — 18 и 19 июня. Причина простая: экзамен компьютерный (его так и зовут — КЕГЭ), и усадить за машины всех выпускников страны в одну дату технически не выходит. Старт — в 10:00 по местному времени, и из-за разницы во времени раньше всех к компьютерам садится Дальний Восток: Камчатка, Чукотка, Сахалин, Якутия, Приморье, Хабаровский край. В европейской части России экзамен начнётся на семь-девять часов позже, так что к этому времени первые реальные задания КЕГЭ 2026 уже расходятся по сети.

Сразу к делу: сливов ЕГЭ ФИПИ заранее нет — ни в продаже, ни в «секретных» каналах. Любое объявление в духе «купи ответы ЕГЭ 2026 накануне» — это либо мошенники, либо восстановленные по памяти задачи под вывеской слива. Здесь будет только то, что выпускники запомнили и принесли с экзамена, причём с обоих дней — и 18-го, и 19-го.

Задания по регионам — Дальний Восток, Сибирь, Урал, центр, юг, Северо-Запад, Калининград — начнём собирать здесь примерно в 4 утра по Москве 18 июня и будем дополнять на следующий день. Сохрани страницу в закладки или подпишись на телеграм-канал, чтобы не пропустить первые варианты ЕГЭ по информатике 2026 с разбором. Удачи — на КЕГЭ главное не гнать и проверять каждый ответ прямо в редакторе.

А если ищешь качественную подготовку к ЕГЭ по информатике, приходи к нам! 

Другие предметы

Ссылки добавляются, сохрани статью в закладки!

.

19 июня

Задание 5

Автомат получает на вход число N и преобразует его в число R

  1. Строится двоичная запись числа N.
  2. Если сумма цифр двоичного числа нечетное число, то дописывается 01.
  3. Если сумма цифр двоичного числа четное число, то дописывается 10.
  4. Результат переводится в десятичную систему и он же является числом R.

Какое наименьшее число R, большее 123, может быть результатом работы этой программы?

Решение

#в тгк @insperia_info
def alg(n):
    s = bin(n)[2:]
    if s.count("1") % 2 != 0:
        s += "01"
    else:
        s += "10"
    return int(s, 2)

res = []
for n in range(10_000):
    if alg(n) > 123:
        res.append(alg(n))
print(min(res))

Ответ: 125

.

Задание 6

Исполнитель Черепаха передвигается по плоскости и оставляет след в виде линии. У исполнителя существует 6 команд: Поднять хвост, означающая переход к перемещению без рисования; Опустить хвост, означающая переход в режим рисования; Вперёд n (где n – целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова; Назад n (где n – целое число), вызывающая передвижение в противоположном голове направлении; Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке, Налево m (где m – целое число), вызывающая изменение направления движения на m градусов против часовой стрелки.

В начальный момент Черепаха находится в начале координат и направлена вверх (вдоль положительного направления оси ординат).

Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что заданная последовательность из S команд повторится k раз.

Черепахе был дан для исполнения следующий алгоритм:
Повтори 4 [Вперёд 28 Направо 90 Вперёд 26 Направо 90]
Поднять хвост
Вперёд 12 Направо 90 Вперёд 13 Налево 90
Опустить хвост
Повтори 4 [Вперёд 67 Направо 90 Вперёд 76 Направо 90]

Определите площадь пересечения фигур, ограниченного заданными алгоритмом линиями.

Решение

#в тгк @insperia_info
from turtle import *
screensize(2000,2000)
tracer(0)
m = 10
lt(90)
for i in range(4):
    fd(28 * m)
    rt(90)
    fd(26 * m)
    rt(90)
up()
fd(12 * m)
rt(90)
fd(13 * m)
lt(90)
down()
for i in range(4):
    fd(67 * m)
    rt(90)
    fd(76 * m)
    rt(90)
up()
for x in range(-30, 50):
    for y in range(-30, 50):
        goto(x * m, y * m)
        dot(3, "blue")
update()
done()

Ответ: 208 (13 * 16)

.

Задание 7

1. Рома записывает голосовое сообщение для своего брата. Перед отправкой сообщение оцифровывается в формате моно с частотой дискретизации 48 0ОО Гц и глубиной кодирования 16 бит. Определите наименьшее целое количество Кбайт, необходимое для сохранения сообщения в памяти (без учёта заголовка), если его длительность – 1 минута 15 секунд. В ответе укажите только число.

Решение

#в тгк @insperia_info
from math import *
I = 1 * 48000 * 16 * (60 + 15)
print(ceil(I / 2**13))

Ответ: 7032

2. Настя записывала голосовое сообщение Дане. Перед отправкой сообщение оцифровывается в формате стерео с частотой дискретизации 28 000 Гц и глубиной кодирования 8 бит. Определите наименьшее целое количество Кбайт, необходимое для сохранения сообщения в памяти (оез учета заголовка), если его длительность – 2 минуты 20 секунд. В ответе укажите только число.

Решение

#в тгк @insperia_info
from math import *
I = 2 * 28000 * 8 * (2 * 60 + 20)
print(ceil(I / 2**13))

Ответ: 7657

.

Задание 8

Все пятибуквенные слова, составленные из букв Л, Е, Б, Е, Д, Ь, записаны в алфавитном порядке и пронумерованы. Вот начало списка:
БББББ
ББББД
ББББЕ
ББББЛ
ББББЬ
Определите, под каким номером в этом списке стоит последнее слово, которое начинается с гласной буквы, содержит ровно две буквы Л и не содержит ни одной буквы Ь.

Решение

#в тгк @insperia_info
from itertools import *
num = 0
for i in product(sorted("ЛЕБДЬ"), repeat = 5):
    num += 1
    s = "".join(i)
    if s[0] == "Е":
        if s.count("Л") == 2:
            if "Ь" not in s:
                print(num)
                # берем последний

Ответ: 1713

.

Задание 10

Откройте файл электронной таблицы, содержащей в каждой строке четыре натуральных числа. Определите количество строк таблицы, для чисел которых выполнено условие:

  • сумма трех наименьших чисел умноженная на 2 больше чем сумма трех наибольших чисел

В ответе запишите только число.

Решение

#в тгк @insperia_info
f = open("...")
k = 0
for s in f:
    a = sorted[int(x) for x in s.split()]
    if sum(a[:3]) * 2 > sum(a[-3:]):
        k += 1
print(k)

.

Задание 10

1. С помощью текстового редактора определите, сколько раз встречается в тексте «Да» или «да» как отдельное слово в двух главах. В ответе запишите только число.

Решение: копируем текст 2 глав в отдельный файл, ищем «да» как отдельное слово, регистр не учитывать.

.

Задание 11

1. На заводе каждой выпущенной детали присваивают уникальный код, состоящий из 450 символов. В базе данных для хранения каждого кода отводится одинаковое и минимально возможное число байт. При этом используется посимвольное кодирование: все символы кодируются одинаковым и минимально возможным числом бит. Известно, что для хранения 780 100 таких кодов выделено не более 83 мегабайт памяти. Определите максимально возможную мощность алфавита, используемого для записи этих кодов.

Решение

#в тгк @insperia_info
from math import *
k = 450
for N in range(10_000, 0, -1):
    i = ceil(log2(N))
    I = ceil((k * i) / 8)
    if 780_100 * I <= 83 * 2**20:
        print(N)
        break

Ответ: 2

2. На предприятии каждой изготовленной детали присваивают серийный номер, состоящий из 200 символов. В базе данных каждый серийный номер занимает одинаковое и минимально возможное число байт. При этом используется посимвольное кодирование серийных номеров, все символы кодируются одинаковым и минимально возможным числом бит. Известно, что для хранения 85 536 серийных номеров потребовалось не менее 9 Мбайт памяти. Определите минимально возможную мощность алфавита, используемого для записи серийных номеров. В ответе запишите только целое число.

Решение

#в тгк @insperia_info
from math import *
k = 200
for N in range(1, 10_000):
    i = ceil(log2(N))
    I = ceil((k * i) / 8)
    if 85_536 * I >= 9 * 2**20:
        print(N)
        break

Ответ: 17

.

Задание 13

1. В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Широковещательным адресом называется специальный адрес, в котором на месте нулевых битов в маске стоят единицы. Сеть задана IP-адресом одного из входящих в неё узлов 70.220.85.104 и сетевой маской 255.255.248.0. Найдите широковещательный адрес данной сети. В ответе укажите сумму числовых значений октетов у найденного IP-адреса. Например, если бы найденный адрес был равен 100.20.3.4, то в ответе следовало бы записать: 127.

Решение

#в тгк @insperia_info
from ipaddress import *

net = ip_network("70.220.85.104/255.255.248.0", 0)
print(sum(int(x) for x in str(net[-1]).split(".")))

Ответ: 632

2. В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети.
Широковещательным адресом называется специализированный адрес, в котором на месте нулей в маске стоят единицы. Адрес сети и широковещательный адрес не могут быть использованы для адресации сетевых устройств.
Сеть задана IP-адресом одного из входящих в неё узлов 134.128.220.14 и сетевой маской 255.192.0.0. Определите наибольший IP-адрес данной сети, который может быть присвоен компьютеру. В ответе укажите найденный IP-адрес без разделителей.
Например, если бы найденный адрес был равен 111.22.3.44, то в ответе следовало бы записать 11122344.

Решение

from ipaddress import *

net = ip_network("134.128.220.14/255.192.0.0", 0)
print(net[-2])

Ответ: 134191255254

3. В терминологии сетей ТСP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и его маске.
Широковещательным адресом называется специализированный адрес, в котором на месте нулей в маске стоят единицы. Адрес сети и широковещательный адрес не могут быть использованы для адресации сетевых устройств.
Сеть задана одним из входящих в неё узлов с IP-адресом 146.180.173.153 и маской сети 255.192.0.0.
Найдите наибольший в данной сети IP-адрес. В ответе укажите найденный IP адрес без разделителей. Например, если бы найденный адрес был равен 111.22.3.44, то в ответе следовало бы записать: 11122344.

Решение

from ipaddress import *

net = ip_network("146.180.173.153/255.192.0.0", 0)
print(net[-1])

Ответ: 146191255255

.

Задание 14

Значение арифметического выражения 5127 + 527 – х, где х – натуральное число, не превышающее 3000, записали в четверичной системе счисления. Определите наименьшее значение х, при котором в четверичной записи числа, являющегося значением данного арифметического выражения, содержится наибольшее количество нулей. В ответе запишите число в десятичной системе счисления.

Решение

#в тгк @insperia_info
m = 0
for x in range(1, 3000+1):
    v = 5**127 + 5**27 - x
    k0 = 0
    while v:
        if v % 4 == 0:
            k0 += 1
        v //= 4
    if k0 > m:
        m = k0
        res = x
print(res)

Ответ: 2666

.

Задание 15

1. Заданы два отрезка P = [3, 18] и Q = [11, 24], лежащие на числовой прямой. Укажите наименьшую возможную длину такого отрезка А, для которого логическое выражение

((x ∈ P) ∧ (x ∈ Q)) -> (x ∈ A)

истинно (т. е. принимает значение 1) при любом значении переменной х.

Решение

Ответ: 7

2. На числовой прямой даны три отрезка: P=[55;57], Q=[22;98] и D=[20;150]. Укажите наименьшую возможную длину такого отрезка A, что логическое выражение

(x∉A) → ((x∈P) ∨ (x∉Q) ∨ (x∉D))

истинно (т. е. принимает значение 1) при любом значении переменной x.

Решение

Ответ: 76

.

Задание 16

Алгоритм вычисления значения функции F(n), где n – целое натуральное число, задан следующими соотношениями:

F(n) = 1, при n = 1
F(n) = (n – 1) * F(n – 1) , если n > 1

Чему равно значение функции (F(10938) / 2 – F(10937)) / F(10936)?

Решение

#в тгк @insperia_info
from functools import *
@lru_cache(100)
def f(n):
    if n == 1:
        return 1
    return (n-1) * f(n-1)

for n in range(1, 10940):
    f(n)

# print(f(10938) % 2) остаток 0
# print((f(10938) // 2 - f(10937)) % f(10936)) остаток 0
print((f(10938) // 2 - f(10937)) // f(10936))

Ответ: 59792580

.

Задание 17

В файле содержится последовательность целых чисел. Её элементы могут принимать целые значения от -100 000 до 100 000 включительно. Определите количество троек последовательности, в которых сумма элементов делится на максимальный элемент последовательности, оканчивающийся на 3. В ответе запишите количество найденных троек, затем максимальную из сумм элементов таких троек. В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности.

Решение

#в тгк @insperia_info
f = open("17.txt")
a = [int(s) for s in f]
res = []
m = max(x for x in a if abs(x) % 10 == 3)
for i in range(len(a)-2):
    t = [a[i], a[i+1], a[i+2]]
    if sum(t) % m == 0:
        res.append(sum(t))

print(len(res), max(res))

.

Задания 19-21

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:

  1. добавить в одну из куч (по своему выбору) 3 камня;
  2. увеличить количество камней в одной из куч (по своему выбору) в 2 раза.

Например, пусть в одной куче 20 камней, а в другой 30 камней; такую позицию в игре обозначим (20, 30). Тогда за один ход можно получить любую из четырёх позиций: (24, 30), (20, 34), (40, 30), (20, 60).

Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в двух кучах становится не менее 173. Победителем считается игрок, сделавший последний ход, то есть первым получивший такую игровую позицию, при которой в двух кучах суммарно 173 камня или больше.

В начальный момент в первой куче 27 камней, во второй куче – S камней; 1 ≤ S ≤ 150.

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

Задание 19. Известно, что Ваня выиграл своим первым ходом после неудачного хода Пети. Укажите минимальное значение S, при котором это возможно.

Решение

def f(s1, s2, k):
    if s1 + s2 >= 173:
        return k % 2 == 0
    if k == 0:
        return 0
    m = [f(s1+3, s2, k-1), f(s1*2, s2, k-1), f(s1, s2+3, k-1), f(s1, s2*2, k-1)]
    return any(m)

print("19:", min([s for s in range(1, 150+1) if f(27, s, 2)]))

Ответ №19: 37

Задание 20. Найдите наименьшее и наибольшее значения S, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

  • Петя не может выиграть за один ход;
  • Петя может выиграть своим вторым ходом независимо от ходов Вани.

Задание 21. Найдите минимальное значение S, при котором:

  • у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
  • у Вани нет стратегии, гарантирующей выигрыш первым ходом.

Решение

def f(s1, s2, k):
    if s1 + s2 >= 173:
        return k % 2 == 0
    if k == 0:
        return 0
    m = [f(s1+3, s2, k-1), f(s1*2, s2, k-1), f(s1, s2+3, k-1), f(s1, s2*2, k-1)]
    if k % 2 != 0:
        return any(m)
    return all(m)

print("20:", *[s for s in range(1, 150+1) if (not f(27, s, 1)) and  f(27, s, 3)])
print("21:", min([s for s in range(1, 150+1) if (not f(27, s, 2)) and  f(27, s, 4)]))

Ответ №20: 36 71
Ответ №21: 67

.

Задание 23

Исполнитель преобразует число на экране. У исполнителя есть две команды, которые обозначены номерами:

  1. Прибавь 2
  2. Замени 1 на 3

Первая из этих команд увеличивает число на экране на 2. Вторая команда может применяться только к числу, в десятичной записи которого содержится хотя бы одна цифра «1», и действует, заменяя все цифры «1» в записи числа на цифры «3» (например, число 11 превратится в 33, а 21 – в 23).
Программа для исполнителя – это последовательность команд. Сколько существует программ, для которых при исходном числе 10 результатом является число 44?

Решение

#в тгк @insperia_info
def f(x, y):
    if x > y:
        return 0
    if x == y:
        return 1
    s = str(x)
    if "1" in s:
        return f(x + 2, y) + f(int(s.replace("1", "3")), y)
    return f(x + 2, y)

print(f(10, 44))

Ответ: 6

.

Задание 24 (ГРОБ)

Текстовый файл состоит из заглавных букв латинского алфавита. Определите в прилагаемом файле максимальное количество идущих подряд символов, образующих корректную римскую запись десятичного числа. Если найдено несколько таких последовательностей, укажите ту, которая обозначает наименьшее десятичное число. В ответе укажите найденную последовательность римских цифр.

Примечание. В римской системе счисления приняты следующие правила:

  • в качестве цифр используют заглавные латинские буквы I, V, X, L, C, D, M, обозначающие 1, 5, 10, 50,100, 500 и 1000 соответственно;
  • цифры V, L, D никогда не повторяются;
  • цифры I, X, С, М могут повторяться не более трёх раз подряд;
  • если меньшая цифра стоит слева от большей, её значение вычитается (это касается только пар IV, IX, XL, XC, CD, CM; вычитаемое не может быть меньше одной десятой вычитателя);
  • если цифра стоит справа от большей или равной, их значения складываются;
  • цифры в записи числа располагаются слева направо в порядке убывания их значений (за исключением случаев вычитания). Например, римская запись ММXXVI корректна и обозначает число 2026.

Решение-1

#в тгк @insperia_info
s = open("24.txt").readline()
# перевод 10сс -> римская сс
def toRom(n):
    decs = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
    roms = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"]

    res = ""
    for i in range(len(decs)):
        while n >= decs[i]:
            res += roms[i]
            n -= decs[i]
    return res

for n in range(10**5, 1, -1):
    if toRom(n) in s:
        print(toRom(n))

Далее выбираем самое длинное (одно из первых), но меньшее по значению.

Решение-2

Через Excel: берем значения из Libra, кладем в файл txt, заливаем в Python и ищем в файле эти вхождения

.

Задание 25

1. Пусть М – сумма минимального и максимального простых натуральных делителей целого числа, не считая самого числа. Если таких делителей у числа нет, то значение М считается равным нулю. Напишите программу, которая перебирает целые числа, большие 5 800 О00, в порядке возрастания и ищет среди них такие, для которых М больше 80 000 и является палиндромом, т.е. одинаково читается слева направо и справа налево. В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце – соответствующие им значения М. Например, для числа 298 M = 2 + 149 = 151.

Решение

#в тгк @insperia_info
def isPrime(n):
    return n > 1 and all(n % d != 0 for d in range(2, int(n**0.5)+1))

def m(n):
    divs = set()
    for d in range(2, int(n**0.5)+1):
        if n % d == 0:
            if isPrime(d):
                divs.add(d)
            if isPrime(n//d):
                divs.add(n//d)
    if not divs:
        return 0
    return max(divs) + min(divs)

# ТГК: insperia_info
x = 5_800_000 + 1
k = 0

while k < 5:
    M = m(x)
    if M > 80_000:
        if str(M) == str(M)[::-1]:
            print(x, M)
            k += 1
    x += 1

Ответ:
5800020 96669
5801724 161161
5804045 89298
5805494 93639
5806156 1451541

2. Пусть М – сумма всех натуральных делителей целого числа. Если таких делителей у числа нет, то значение М считается равным нулю. Напишите программу, которая перебирает целые числа, большие 8 494154, в порядке возрастания и ищет среди них такие, укоторых есть ровно 4 различных натуральных делителя, а значение М является палиндромом (то есть читается слева-направо и справа-налево одинаково). В ответе запишите в первом столбце таблицы первые 5 найденных чисел в порядке возрастания, а во втором столбце – соответствующие им значения М. Например, для числа 20 S = 1 + 2 + 4 + 5 +10 + 20 = 42.

Решение

#в тгк @insperia_info
def d(n):
    divs = set()
    for d in range(1, int(n**0.5)+1):
        if n % d == 0:
            divs |= {d, n//d}
    return sorted(divs)

# ТГК: insperia_info
x = 8_494_154 + 1
k = 0

while k < 5:
    D = d(x)
    M = sum(D)
    if len(D) == 4:
        if str(M) == str(M)[::-1]:
            print(x, M)
            k += 1
    x += 1

Ответ:
8495303 8864688
8519453 8889888
8580323 8616168
8602333 8812188
8602883 8610168

.

Задание 27

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

Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных точек кластера минимальна. Для каждого кластера гарантируется единственность центра.

Расстояние между двумя точками на плоскости А(х11) и В(х22) вычисляется по формуле:

d(A,B)=(x2x1)2+(y2y1)2d(A, B) = \sqrt{(x_2 – x_1)^2 + (y_2 – y_1)^2}

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

В файле Б хранятся координаты точек трёх кластеров, где Н = 5, W = 4 для каждого кластера. В каждой строке записана информация о расположении на карте одной звезды: сначала координата Х, затем координата У. Значения даны в условных единицах. Известно, что количество звёзд не превышает 10 000.

Известно, что в файле имеются координаты ровно трёх “лишних” точек, представляющих аномалии, которые возникли в результате помех при передаче данных. Эти точки не относятся ни к одному из кластеров, их учитывать не нужно.

Для файла А определите координаты центра каждого кластера, затем найдите два числа: Рх-минимальную из абсцисс центров кластеров, и Ру– минимальную из ординат центров кластеров.

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

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

Решение

#в тгк @insperia_info
f = open("27a.txt")
clustersA = [[] for i in range(2)]
clustersB = [[] for i in range(3)]

for s in f:
    x, y = map(float, s.replace(",", ".").split())
    if ...: # тут убираем аномалии
        pass
    elif ...:
        clustersA[0].append([x, y])
    else:
        clustersA[1].append([x, y])


f = open("27b.txt")
for s in f:
    x, y = map(float, s.replace(",", ".").split())
    if ...: # тут убираем аномалии
        pass
    elif ...:
        clustersB[0].append([x, y])
    elif ...:
        clustersB[1].append([x, y])
    else:
        clustersB[2].append([x, y])


from math import *
#в тгк @insperia_info

def getCenter(clust):
    c = []
    for t0 in clust:
        s = sum(dist(t0, t) for t in clust)
        c.append([s, t0])
    return min(c)[1]

centersA = [getCenter(clust) for clust in clustersA]
centersB = [getCenter(clust) for clust in clustersB]

Px = min(c[0] for c in centersA)
Py = min(c[1] for c in centersA)

dists = [dist(c1, c2) for c1 in centersB for c2 in centersB if c1 != c2]
Q1 = min(dists)
Q2 = max(dists)

print(int(abs(Px * 10_000)), int(abs(Py * 10_000)))
print(int(abs(Q1 * 10_000)), int(abs(Q2 * 10_000)))

.

18 июня

Задание 2

Миша заполнял таблицу истинности логической функции

F = (x → y ) ∧ (y → z) ∧ (z → w),

но успел заполнить лишь фрагмент из трёх различных её строк, даже не указав, какому столбцу таблицы соответствует каждая из переменных.

Ниже представлен частично заполненный фрагмент таблицы истинности функции F , содержащей неповторяющиеся строки.

Определите, какому столбцу истинности функции F соответствует каждая переменная x, y, z, w. В ответе напишите буквы в том порядке, в котором идут соответствующие им столбцы (сначала буква, соответствующая первому столбцу; затем буква, соответствующая второму столбцу, и т.д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.

Решение

#в тгк @insperia_info
def f(x, y, z, w):
    return (x <= y) and (y <= z) and (z <= w)

from itertools import *

for a1, a2, a3, a4, a5 in product([0, 1], repeat = 5):
    t = [(0, a1, a2, 1), (1, a3, 0, 1), (a4, 1, a5, 0)]
    if len(set(t)) == len(t):
        for p in permutations("xyzw"):
            if [f(**dict(zip(p, s))) for s in t] == [1, 1, 1]:
              print(*p)

Ответ: ywxz

.

Задание 4

Для кодирования последовательности, состоящей из букв К, О, Л, Б, решили использовать неравномерный двоичный код, удовлетворяющий условию Фано. Букве К соответствует двоичный код 0, букве О – код 10.
Какова наименьшая суммарная длина кодовых слов для всех букв в слове КОЛОБОК?

Решение

Ответ: 14

.

Задание 5

На вход алгоритма подается натуральное число N. Алгоритм строит по нему новое число R следующим образом:

  1. Строится двоичная запись числа N.
  2. К этой записи дописываются справа ещё два разряда по следующему правилу:
    – складываются все цифры двоичной записи числа N, и остаток от деления суммы на 2 дописывается в конец числа (справа);
    – над полученной записью производятся те же действия – справа дописывается остаток от деления суммы её цифр на 2.

Полученная таким образом запись является двоичной записью искомого числа R. Укажите наименьшее число N, для которого результат работы алгоритма больше числа 253. В ответе запишите это число в десятичной системе счисления.

Решение

def alg(n):
    s = bin(n)[2:]
    s += str(s.count("1") % 2)
    s += str(s.count("1") % 2)
    return int(s, 2)

for n in range(1, 1000):
    if alg(n) > 253:
        print(n)
        break

#в тгк @insperia_info

Ответ: 64

.

Задание 6

1. Исполнитель Черепаха передвигается по плоскости и оставляет след в виде линии. Черепаха может выполнять три команды: Вперёд n (n – число), Направо m (m – число) и Налево m (m – число). По команде Вперёд n Черепаха перемещается вперёд на n единиц. По команде Направо m Черепаха поворачивается на месте на m градусов по часовой стрелке,
при этом соответственно меняется направление дальнейшего движения. По команде Налево m Черепаха поворачивается на месте на m градусов против часовой стрелки, при этом соответственно меняется направление дальнейшего движения.
В начальный момент Черепаха находится в начале координат и направлена вверх (вдоль положительного направления оси ординат).
Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что заданная последовательность из S команд повторится k раз.
Черепаха выполнила следующую программу:
Направо 45 Повтори 7 [Вперёд 5 Направо 45 Вперёд 10 Направо 135].
Определите, сколько точек с целочисленными координатами будут находиться внутри области, которая ограничена линией, заданной алгоритмом. Точки на линии учитывать не следует.

2. Исполнитель Черепаха передвигается по плоскости и оставляет след в виде линии. У исполнителя существует 6 команд: Поднять хвост, означающая переход к перемещению без рисования; Опустить хвост, означающая переход в режим рисования; Вперёд n (где n – целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова; Назад n (где n – целое число), вызывающая передвижение в противоположном голове направлении; Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке, Налево m (где m – целое число), вызывающая изменение направления движения на m градусов против часовой стрелки.
В начальный момент Черепаха находится в начале координат и направлена вверх (вдоль положительного направления оси ординат).
Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что заданная последовательность из S команд повторится k раз.
Черепаха выполнила следующую программу:
Повтори 2 [Вперёд 14 Налево 270 Назад 12 Направо 90]
Поднять хвост
Вперёд 9 Направо 90 Назад 7 Налево 90
Опустить хвост
Повтори 2 [Вперёд 13 Направо 90 Вперёд 6 Направо 90]

Определите, сколько точек с целочисленными координатами находятся внутри пересечения фигур, ограниченного заданными алгоритмом линиями, включая точки на линиях.

Решение

from turtle import *
screensize(1000, 1000)
tracer(0)
m = 20
lt(90)
for i in range(2):
    fd(14 * m)
    lt(270)
    bk(12 * m)
    rt(90)

#в тгк @insperia_info

up()
fd(9 * m)
rt(90)
bk(7 * m)
lt(90)
down()
for i in range(2):
    fd(13 * m)
    rt(90)
    fd(6 * m)
    rt(90)
up()
for x in range(-30, 30):
    for y in range(-30, 30):
        goto(x * m, y * m)
        dot(3, "blue")
update()
done()

Ответ: 42

.

Задание 7

1. Лена записывает голосовое сообщение для своей подруги. Перед отправкой сообщение оцифровывается в формате стерео с частотой дискретизации 28 ООО Гц и глубиной кодирования 8 бит. Определите наименьшее целое количество Кбайт, необходимое для сохранения сообщения в памяти (без учёта заголовка), если его длительность – 2 минуты 20 секунд. В ответе укажите только число.

Решение

from math import *
# объем в битах
I = 2 * 28000 * 8 * (60 * 2 + 20)
# переводим в Кбайты (целые)
print(ceil(I / 2**13))

Ответ: 7657

2. Лена записывает голосовое сообщение для своей подруги. Перед отправкой сообщение оцифровывается в формате стерео с частотой дискретизации 32 000 Гц и глубиной кодирования 16 бит. Определите наименьшее целое количество Кбайт, необходимое для сохранения сообщения в памяти (без учёта заголовка), если его длительность – 2 минуты 27 секунд. В ответе укажите только число.

Решение

from math import *
# объем в битах
I = 2 * 32000 * 16 * (60 * 2 + 27)
# переводим в Кбайты (целые)
print(ceil(I / 2**13))

Ответ: 18375

.

Задание 8

1. Определите количество пятизначных чисел, записанных в девятеричной системе счисления, в записи которых ровно две цифры 3, и при этом никакая нечётная цифра не стоит рядом с цифрой 2.

Решение

#в тгк @insperia_info
from itertools import *
k = 0
for i in product('012345678', repeat = 5):
    a = ''.join(i)
    if a[0]!='0' and a.count('3') == 2:
        for i in '1357':
            a = a.replace(i,'*')
        if '*2' not in a and '2*' not in a:
            k+=1
print(k)

2. Все пятибуквенные слова, составленные из букв А, К, Ц, Е, Н, Т, записаны в алфавитном порядке и пронумерованы. Вот начало списка:

1. AAAAA
2. AAAAE
3. ААААК
4. ААААН
5. AAAAТ
6. ААААЦ

Определите, под каким номером в этом списке стоит первое слово, которое не начинается с букв А, Е и К и при этом содержит в своей записи не менее одной буквы Т.
Примечание. Слово – последовательность идущих подряд букв, не обязательно осмысленная.

Решение

from itertools import *
num = 0
for i in product(sorted("АКЦЕНТ"), repeat = 5):
    num += 1
    s = "".join(i)
    if s[0] not in "АЕК":
        if "Т" in s:
            print(num)
            break

Ответ: 3893

.

Задание 9

1. Откройте файл электронной таблицы, содержащей в каждой строке семь натуральных чисел. Определите количество строк таблицы, содержащих числа, для которых выполнены оба условия:
1) одно число повторяется 3 раза, другое 2 раза, остальные различны;
2) максимальное из повторяющихся меньше наибольшего из не повторяющихся.

Решение

f = open("9")
k = 0
for s in f:
    a = [int(x) for x in s.split()]
    p = [x for x in a if a.count(x) > 1]
    np = [x for x in a if a.count(x) == 1]
    if len(p) == 5 and len(set(p)) == 2 and len(np) == 2:
        if max(p) < max(np):
            k += 1
print(k)

.

Задание 10

1. С помощью текстового редактора определите, сколько раз в тексте глав 5 и 6 романа в стихах А. С. Пушкина «Евгений Онегин» встречается слово «Что» (или «что») в качестве отдельного слова. Регистр при поиске учитывать не следует, другие слова, в состав которых входит «что» как часть, учитывать не нужно. В ответе запишите только число.

Решение: ищем «что» как отдельное слово, регистр не учитывать

2. С помощью текстового редактора определите, сколько раз встречается отдельное слово «и» или «И» в тексте глав XI и XIV второй части тома 2 романа Л.Н. Толстого «Война и мир». В ответе запишите только число.

Решение: ищем «и» как отдельное слово, регистр не учитывать

.

Задание 11

На предприятии каждой изготовленной детали присваивают серийный номер из 225 символов. Для хранения каждого номера отведено одинаковое и минимально возможное число байт; используется посимвольное кодирование – все символы кодируются одинаковым и минимально возможным числом бит. Известно, что для хранения 1270 серийных номеров отведено не более 104 Кбайт памяти.

Определите максимально возможную мощность алфавита, используемого для записи серийных номеров.

Решение

#в тгк @insperia_info
from math import *
k = 225
for N in range(10_000, 0, -1):
    i = ceil(log2(N))
    I = ceil((k * i) / 8)
    if 1270 * I <= 104 * 2**10:
        print(N)
        break

Ответ: 4

.

Задание 13

1. Сеть задана ІР-адресом одного из входящих в неё узлов 102.162.200.51 и сетевой маской 255.255.255.0.1. Найдите в данной сети наибольший IР-адрес, который может быть назначен компьютеру. В ответе укажите сумму числовых значений октетов найденного IP-адреса. Например, если бы найденный адрес был равен 100.20.3.4, то в ответе следовало бы записать: 127.

Решение

from ipaddress import *

net = ip_network("102.162.200.51/255.255.255.0", 0)

print(sum(int(x) for x in str(net[-2]).split(".")))

Ответ: 718

2. В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети.

Обычно маска записывается по тем же правилам, что и IP-адрес, – в виде 4 байтов, причем каждый байт записывается в виде десятичного числа. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и его маске. Например, если IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0.

Узел имеет IP-адрес 210.185.140.126. Маска сети равна 255.255.255.252. Определите наименьший возможный IP-адрес в этой сети (адрес сети) и в ответе запишите сумму значений его октетов.

Решение

from ipaddress import *

net = ip_network("210.185.140.126/255.255.255.252", 0)

print(sum(int(x) for x in str(net[0]).split(".")))

Ответ: 659

.

Задание 14

1. Значение арифметического выражения 4 * 16^25 + 2 * 8^30 – 64^10 записали в двоичной системе счисления. Сколько цифр 0 содержится в этой записи?

Решение

x = 4 * 16**25 + 2 * 8**30 - 64**10
print(bin(x)[2:].count("0"))

Ответ: 71

2. Операнды арифметического выражения записаны в системе счисления с основанием 22.

63×8987522 + 17×5122 + 75×322

В записи чисел переменной x обозначена неизвестная цифра из алфавита 22-ричной системы счисления.

Определите наибольшее значение x, при котором значение данного арифметического выражения кратно 21. Для найденного значения x вычислите частное от деления значения арифметического выражения на 21 и укажите его в ответе в десятичной системе счисления. Основание системы счисления указывать не нужно.

Решение

from string import *
#в тгк @insperia_info

for x in printable[:22][::-1]:
    s1 = f"63{x}8987522"
    s2 = f"17{x}5122"
    s3 = f"75{x}322"
    res = int(s1, 22) + int(s2, 22) + int(s3, 22)
    if res % 21 == 0:
        print(res // 21)
        break

Ответ: 355203672070

.

Задание 15

1. Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m» дан отрезок В = [15; 30]… Для какого наибольшего натурального числа А формула

ДЕЛ(x, А) V (ДЕЛ (x, 23) → ¬ (x є B))

тождественно истинна (т.е. принимает значение 1) при любом натуральном значении переменной х?

Решение

def d(n, m):
    return n % m == 0

def f(x, A):
    return d(x, A) or (d(x, 23) <= (x not in list(range(15, 31))))
#в тгк @insperia_info

for A in range(1000, 0, -1):
    if all(f(x, A) for x in range(1, 10_000)):
        print(A)

Ответ: 23

2. Обозначим через ДЕЛ(x, y ) утверждение «натуральное число x делится без остатка на натуральное число y». Для какого наибольшего натурального числа A логическое выражение

(¬ ДЕЛ(x, 7) ∧ ДЕЛ(x, 13)) → (x > A − 40)

истинно при любом натуральном значении переменной x?

Решение

def d(n, m):
    return n % m == 0

def f(x, A):
    return ((not d(x, 7)) and d(x, 13)) <= (x > A - 40)

for A in range(1000, 0, -1):
    if all(f(x, A) for x in range(1, 10_000)):
        print(A)
        break

Ответ: 52

.

Задание 16

1. Алгоритм вычисления значения функции F (n), где n — натуральное число, задан следующими соотношениями:
F (n) = 1, если n = 1;
F (n) = n · F(n − 1), если n > 1.
Определите значение (F (3038) + 3 · F (3037))/F (3036).

Решение

from functools import *
@lru_cache(100)
def f(n):
    if n == 1:
        return 1
    return n * f(n-1)

for n in range(1, 3040):
    f(n)

print((f(3038) + 3 * f(3037)) / f(3036))

Ответ: 9235517

2. Алгоритм вычисления значения функции F (n), где n — целое неотрицательное число, задан
следующими соотношениями:
F (n) = n, , если n ≤ 2;
F (n) = F (n − 2) + 3 · n, если n > 2 и нечетно;
F (n) = (n + 5) · F (n − 1) · n, если n > 2 и четно;
Определите значение F (2026)/F (2025).

Решение

from functools import *
@lru_cache(100)
def f(n):
    if n <= 2:
        return n
    if n % 2 != 0:
        return f(n-2) + 3 * n
    return (n+5) * f(n-1) * n

for n in range(2027):
    f(n)

print(f(2026)/f(2025))

Ответ: 4114806

.

Задание 17

В файле содержится последовательность целых чисел. Определите количество пар идущих подряд элементов, в которых элементы не равны друг другу, а абсолютная разность между ними кратна минимальному положительному элементу последовательности, который кратен 9. В ответе запишите два числа: сначала количество найденных пар, затем максимальную сумму элементов таких пар.

Решение

#в тгк @insperia_info
f = open("17")

a = [int(s) for s in f]

m = min(x for x in a if x > 0 and x % 9 == 0)
res = []

for i in range(len(a)-1):
    if a[i] != a[i-1]:
        if abs(a[i] - a[i-1]) % m == 0:
            res.append(a[i] + a[i-1])

print(len(res), max(res))

.

Задания 19-21

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в два раза. Например, пусть в одной куче 10 камней, а в другой 5 камней; такую позицию в игре будем обозначать (10, 5). Тогда за один ход можно получить любую из четырёх позиций: (11, 5), (20, 5), (10, 6), (10, 10). Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 77. Победителем считается игрок, сделавший последний ход, то есть первым получивший такую позицию, при которой в кучах будет 77 или больше камней.

В начальный момент в первой куче было семь камней, во второй куче  — S камней; 1 ≤ S ≤ 69.

Задание 19. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда возможна такая ситуация.

Решение

def f(s1, s2, k):
    if s1 + s2 >= 77:
        return k % 2 == 0
    if k == 0:
        return 0
    m = [f(s1+1, s2, k-1), f(s1*2, s2, k-1), f(s1, s2+1, k-1), f(s1, s2*2, k-1)]
    return any(m)

print("19:", min([s for s in range(1, 69+1) if f(7, s, 2)]))

Ответ №19: 18

Задание 20. Найдите два наименьших значения S, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия: Петя не может выиграть за один ход, но может выиграть своим вторым ходом независимо от ходов Вани.

Задание 21. Найдите минимальное значение S, при котором у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети, но у Вани нет стратегии, гарантирующей выигрыш первым ходом.

Решение

def f(s1, s2, k):
    if s1 + s2 >= 77:
        return k % 2 == 0
    if k == 0:
        return 0
    m = [f(s1+1, s2, k-1), f(s1*2, s2, k-1), f(s1, s2+1, k-1), f(s1, s2*2, k-1)]
    if k % 2 != 0:
        return any(m)
    return all(m)
#в тгк @insperia_info

print("20:", *[s for s in range(1, 69+1) if (not f(7, s, 1)) and  f(7, s, 3)][:2])
print("21:", min([s for s in range(1, 69+1) if (not f(7, s, 2)) and  f(7, s, 4)]))

Ответ №20: 31 34
Ответ №21: 30

.

Задание 22

В файле содержится информация о совокупности N вычислительных процессов, которые могут выполняться параллельно или последовательно. Приостановка выполнения процесса не допускается. Будем говорить, что процесс В зависит от процесса А, если для выполнения процесса В необходимы результаты выполнения процесса А. В этом случае процессы А и В могут выполняться только последовательно. Информация о процессах представлена в файле в виде таблицы. В первом столбце таблицы указан идентификатор процесса (ID), во втором столбце таблицы – время его выполнения в миллисекундах, в третьем столбце перечислены с разделителем «;» ID процессов, от которых зависит данный процесс. Если процесс независимый, то в таблице указано значение О. Определите максимальное количество процессов, которые начнут выполняться не ранее 15-й секунды (время начала 15 секунд также учитывается).

Решение

Сказано, что каждый процесс начинается в минимально возможное время, поэтому сдвигов нет. Считаем по каждому процессу минимальную последнюю миллисекунду по каждому процессу (максимум из тех, от кого зависим процесс, + длительность), потом первую миллисекунду (последняя миллисекунда = длительность + 1). В завершение проверяем, у скольких процессов первая миллисекунда >= 15.

.

Задание 23

1. Исполнитель преобразует число на экране. У исполнителя есть две команды, которые обозначены латинскими буквами.

A. Прибавить 1
B. Поменять местами

Первая команда уменьшает число на экране на 2, вторая команда меняет разряды десятков и единиц в числе местами, причём она применяется только к числам, у которых цифра в разряде десятков меньше цифры в разряде единиц. Программа для исполнителя — это последовательность команд.

Сколько существует программ, для которых при исходном числе 100 результатом является число 150?

Решение

def f(x, y):
    if x > y:
        return 0
    if x == y:
        return 1
    s = str(x)
    if s[-2] < s[-1]:
        return f(x+1, y) + f(int(s[:-2]+s[-1]+s[-2]), y)
    return f(x+1, y)

print(f(100, 150))
#в тгк @insperia_info

Ответ: 35

2. Исполнитель преобразует число на экране. У исполнителя есть две команды:

1. Вычти 1
2. Найди целую часть от деления на 2

Сколько существует программ, которые преобразуют исходное число 40 в число 6, при этом траектория вычислений обязательно содержит число 15?

Решение

def f(x, y):
    if x < y:
        return 0
    if x == y:
        return 1
    return f(x-1, y) + f(x // 2, y)

print(f(40, 15) * f(15, 6))

Ответ: 60

3. Исполнитель преобразует число на экране. У исполнителя есть две команды, которые обозначены номерами:

1. Прибавь 3
2. Поменяй местами

Первая из этих команд увеличивает число на экране на 3. Вторая команда может применяться только к числу, у которого цифра разряда десятков по значению меньше цифры, стоящей в разряде единиц, и действует, заменяя число на экране числом, в котором цифры двух младших разрядов поменялись местами.

Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 10 результатом является число 169?

.

Задание 24

Текстовый файл состоит не более чем из 10^6 символов и содержит только десятичные цифры, а также знаки «+» и «*» (сложения и умножения). Определите максимальное количество символов в непрерывной последовательности, являющейся корректным арифметическим выражением с целыми неотрицательными числами (без знака). В этом выражении никакие два знака арифметических операций не стоят рядом. В записи чисел отсутствуют незначащие (ведущие) нули. В ответе укажите количество символов в найденном выражении.

Решение

s = open("24.txt").readline()
from re import *
n = r"(0|[1-9][0-9]*)"
r = rf"{n}([+*]{n})*"
mL = max([x.group() for x in finditer(r, s)], key = len)
print(len(mL), mL)
#в тгк @insperia_info

.

Задание 25

Напишите программу, которая перебирает целые числа, большие 7_513_048, в порядке возрастания и ищет среди них числа, представленные в виде произведения ровно двух простых множителей, не обязательно различных, каждый из которых содержит в своей записи хотя бы одну цифру 1 и одну цифру 6.
В ответе для первых 5 найденных чисел запишите само число и наибольший из его простых множителей в соответствующие столбцы таблицы.

Решение

def isPrime(n):
    return n > 1 and all(n % d != 0 for d in range(2, int(n**0.5)+1))

def ok(n):
    return "1" in str(n) and "6" in str(n)

x = 7_513_048 + 1
k = 0
while k < 5:
    for d in range(2, int(x**0.5)+1):
        if x % d == 0 and isPrime(d) and ok(d):
            if isPrime(x//d) and ok(x//d):
                print(x, x//d)
                k += 1
                break
    x += 1


Ответ

7513309 123169
7514761 16301
7514789 46103
7514909 11369
7517219 12263

.

Задание 26

  1. В заявке указаны время начала и время окончания приёма специалистом (в минутах от начала суток). Задача на хранение багажа в аэропорту или клиенты МФЦ. Вопрос: сколько туристов смогут оставить свой багаж / сколько клиентов МФЦ смогут попасть на приём за 24 часа и какая ячейка / какое окно примет багаж / клиента последним.

Решение

f = open("26")
k = int(f.readline())
n = int(f.readline())

a = []
for s in f:
    a.append([int(x) for x in s.split()])

#в тгк @insperia_info

a.sort()

w = [0] * k
# количество обслуженных клиентов
clients = 0
# наименьший номер окна, принявшего последнего клиента
lastW = 0
for i in a:
    tIn, tOut = i[0], i[1]
    for j in range(len(w)):
        if w[j] <= tIn:
            w[j] = tOut + 1
            clients += 1
            lastW = j + 1
            break

print(clients, lastW)

.

Задание 27

1. Учёный решил провести кластеризацию некоторого множества звёзд по их расположению на карте звёздного неба. Кластер звёзд – это набор звёзд (точек) на графике. Каждый кластер имеет форму прямоугольника, причём эти прямоугольники между собой не пересекаются. Центр кластера – это одна из звёзд на графике, сумма расстояний от которой до всех остальных звёзд кластера минимальна. В файле А хранятся данные о звёздах 2-х кластеров, в файле Б хранятся данные о звёздах 3-х кластеров. Для каждой звезды дана характеристика: тип цвета, тип светимости и её размер в соответствии с таблицей.

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

ρ(A,B)=(x2x1)2+(y2y1)2\rho(A, B) = \sqrt{(x_2 – x_1)^2 + (y_2 – y_1)^2}

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

Для файла А определите координаты центра каждого кластера, затем найдите два числа: A1 – минимальное расстояние от центра кластера с наименьшим количеством точек до красного гиганта, и A2 – максимальное расстояние от центра кластера с наименьшим количеством точек до красного гиганта.

Для файла Б определите координаты центра каждого кластера, затем найдите два числа: B1 – минимальное расстояние между двумя различными жёлтыми карликами, расположенными в одном и том же кластере, и B2 – расстояние между центрами кластеров с минимальным и максимальным количеством жёлтых карликов.

В ответе запишите четыре числа: в первой строке – целую часть произведения A1 ×10000, затем целую часть произведения A2 × 10000; во второй строке – сначала целую часть произведения B1 × 10000, затем целую часть произведения B2 × 10000.

Решение

clustersA = [[] for i in range(2)]
clustersB = [[] for i in range(3)]

f = open("27a.txt")

for s in f:
    x, y, h = s.replace(",", ".").split()
    x, y = float(x), float(y)
    c, s, r = h[0], h[1], h[2:]
    if ...:
        clustersA[0].append([x, y, c, s, r])
    else:
        clustersA[1].append([x, y, c, s, r])

#в тгк @insperia_info

# print([len(c) for c in clustersA])

f = open("27b.txt")

for s in f:
    x, y, h = s.replace(",", ".").split()
    x, y = float(x), float(y)
    c, s, r = h[0], h[1], h[2:]
    if ...:
        clustersB[0].append([x, y, c, s, r])
    elif ...:
        clustersB[1].append([x, y, c, s, r])
    else:
        clustersB[2].append([x, y, c, s, r])

# print([len(c) for c in clustersB])

from math import *

def getCenter(clust):
    c = []
    for p0 in clust:
        s = sum(dist(p0[:2], p[:2]) for p in clust)
        c.append([s, p0])
    return min(c)[1]

centersA = [getCenter(clust) for clust in clustersA]
centersB = [getCenter(clust) for clust in clustersB]

pointsA = clustersA[0] + clustersA[1]

kgA = [p for p in pointsA if p[2] == "Y" and p[4] == "III"]
A1 = min(dist(centersA[0][:2], p[:2]) for p in kgA)
A2 = max(dist(centersA[0][:2], p[:2]) for p in kgA)

zk0 = [p for p in clustersB[0] if p[2] == "Z" and p[4] == "V"]
zk1 = [p for p in clustersB[1] if p[2] == "Z" and p[4] == "V"]
zk2 = [p for p in clustersB[2] if p[2] == "Z" and p[4] == "V"]
m0 = min(dist(p1[:2], p2[:2]) for p1 in zk0 for p2 in zk0 if p1 != p2)
m1 = min(dist(p1[:2], p2[:2]) for p1 in zk1 for p2 in zk1 if p1 != p2)
m2 = min(dist(p1[:2], p2[:2]) for p1 in zk2 for p2 in zk2 if p1 != p2)

B1 = min(m0, m1, m2)

# print(len(zk0), len(zk1), len(zk2))

B2 = dist(centersB[1][:2], centersB[2][:2])

print(int(A1 * 10_000), int(A2 * 10_000))
print(int(B1 * 10_000), int(B2 * 10_000))

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

Цвет: G – белый, J – зелёный, l – синий, N – оранжевый, Y – красный, S – голубой, Z – жёлтый.

Размер: I – сверхгигант, II – яркий гигант, III – гигант, IV – субгигант, V – карлик, VI – субкарлик, VII – белый карлик.

Полученные значения записаны в характеристике слитно: обозначение цвета, светимость (арабская цифра) и обозначение размера. Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных точек кластера минимальна (центроид). В файле хранятся данные о звёздах двух кластеров, где H = 6.5, W = 4.5 для каждого кластера. В каждой строке записана координата х, затем координата у, а затем её характеристика. В файле в хранятся аналогичные данные о звёздах трёх кластеров.

Задание А. Определите координаты центра каждого кластера для файла А, затем найдите два числа:

  • A1 – абсцисса центра кластера с наименьшим количеством звёзд светимости
  • A2 – ордината центра кластера с наибольшим количеством звёзд светимости

Задание Б. Определите координаты центра каждого кластера для файла Б, затем найдите два числа:

  • B1 – расстояние между центрами кластеров с минимальным и максимальным количеством красных звёзд;
  • B2 – наибольшее расстояние между центром кластера и красной звездой из этого же кластера.

В ответе укажите сначала целые части произведений A1 * 10000 и A2 * 10000, а во второй строке – B1 * 10000 и B2 * 10000.

.

Часто задаваемые вопросы (FAQ)

Сколько баллов можно получить на ЕГЭ по информатике в 2026 году?

Максимум — 29 первичных баллов, это 100 тестовых. Для вузов Минобрнауки порог — 40 тестовых баллов. В IT-направлениях — ИТМО, ВШЭ-ФКН, ПМИ МГУ — проходные обычно от 80 и выше. И про специфику КЕГЭ: он полностью компьютерный, никаких бланков. Не сохранил ответ — он не засчитывается. Это самая обидная потеря баллов на экзамене, и она легко предотвратима.

Что изменилось в ЕГЭ по информатике в 2026 году?

Больших структурных изменений нет. ФИПИ добавил Java и C# в список официально поддерживаемых языков задания 27: теперь доступны Python, Pascal, C++, Java и C#. Задачи по рекурсии стали чуть сложнее по условию. Ещё деталь: КЕГЭ снова проходит в два дня — 18 и 19 июня. Не потому что экзамен стал длиннее, а потому что физически усадить всех за компьютеры в один день не выходит.

Из чего состоит ЕГЭ по информатике 2026?

27 заданий, 3 часа 55 минут, всё на компьютере. Никаких ручек и бланков — ответы вводятся прямо в интерфейсе. Темы: системы счисления и кодирование, логика, алгоритмы, программирование, электронные таблицы, базы данных, сети, информационная безопасность. Самое дорогое задание — 27: нужно написать работающую программу, стоит 3 первичных балла из 29. Это около 10% итогового балла за одно задание — и именно оно чаще всего решает, будет ли у тебя 60 тестовых или 80.

Поделиться

Начни обучение
с бесплатного
вводного урока!

Запишись на вводный урок
в нашем боте всего за минуту

Что будет на вводном уроке?
  • Проведем диагностику знаний

    Проведем диагностику знаний

  • Составим план подготовки

    Составим план подготовки

  • Расскажем про курсы

    Расскажем про курсы

  • Подарим полезные материалы

    Подарим полезные
    материалы

Преподаватель