Решайте задания в удобном темпе. Ответы сохраняются в браузере, а результат появится после отправки теста.

Верный ответ: 30
На графе пункт В имеет пять соседей — это наибольшая степень. В таблице пять связей имеет только П6, значит, В = П6. Пункт Е имеет степень 4, поэтому ему соответствует П4.
Вершины А и К имеют степень 2. Пункт К соединён с Е степени 4 и Г степени 3. В таблице такой набор соседей имеет П1: он соединён с П4 степени 4 и П2 степени 3. Поэтому К = П1, а Г = П2.
Искомой дороге Г—К соответствует ребро П2—П1. Его длина в таблице равна 30.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 19059.
(x ≡ z) ∨ (x → (y ∧ ¬w))
Дан частично заполненный фрагмент из трёх различных строк таблицы истинности функции F. Определите, какому столбцу соответствует каждая из переменных w, x, y, z.| Переменная 1 | Переменная 2 | Переменная 3 | Переменная 4 | F |
|---|---|---|---|---|
| 0 | 0 | |||
| 0 | 0 | 1 | 0 | |
| 0 | 1 | 1 | 1 |
Верный ответ: yzwx
Для функции (x ≡ z) ∨ (x → (y ∧ ¬w)) рассмотрим сначала строки, в которых F = 0. Дизъюнкция ложна только тогда, когда оба слагаемых ложны.
Из x ≡ z = 0 следует x ≠ z. Импликация x → (y ∧ ¬w) ложна только при x = 1 и y ∧ ¬w = 0. Поэтому в каждой ложной строке x = 1, z = 0, а также выполняется y = 0 или w = 1.
Первая ложная строка содержит w = 0. Тогда ¬w = 1, поэтому для равенства y ∧ ¬w = 0 необходимо y = 0. Получается набор столбцов 0 0 0 1.
Во второй ложной строке уже указаны y = 0, z = 0 и w = 1; значение x должно быть 1. Получается 0 0 1 1.
В третьей строке F = 1, причём y = 0, w = 1, x = 1. Импликация при таких значениях ложна, поэтому истинность функции может обеспечить только эквивалентность x ≡ z; следовательно, z = 1. Полная строка имеет вид 0 1 1 1.
Сигнатуры столбцов равны 000, 001, 011 и 111, что соответствует переменным y, z, w и x.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 19087.

Верный ответ: 3
В таблице «Товар» находим товар «Чай черный индийский»: его артикул — 44. В таблице «Магазин» выбираем пять магазинов Октябрьского района: M1, M5, M6, M10 и M15.
В таблице «Движение товаров» оставляем операции «Поступление» с артикулом 44 за указанный период. Количества поставленных упаковок по магазинам равны: M1 — 170, M10 — 170, M15 — 180, M5 — 180, M6 — 180.
Условие «более 170» является строгим: значения, равные 170, не подходят. Остаются три магазина с поставкой 180 упаковок.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 18953.
Верный ответ: 32
Сумма длин известных слов равна 3 + 3 + 2 + 2 = 10. Коды 000, 001 и 01 полностью заполняют ветвь 0, а код 10 занимает часть ветви 1. Для пяти оставшихся букв доступна только ветвь 11.
Внутри этой ветви нужно построить код для пяти букв. На втором уровне относительно вершины 11 имеется четыре ветви, поэтому три из них можно оставить словами длины 4, а четвёртую приходится разделить на два слова длины 5. Например, подходят 1100, 1101, 1110, 11110 и 11111.
Длины новых слов дают 4 + 4 + 4 + 5 + 5 = 22. Пять листьев невозможно разместить ближе к вершине 11, поскольку на предыдущем уровне их только четыре.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 19170.
1. Строится двоичная запись числа N.
2. Складываются все цифры полученной двоичной записи. В конец записи (справа) дописывается остаток от деления полученной суммы на 2.
3. Предыдущий пункт повторяется для записи с добавленной цифрой.
4. Результат переводится в десятичную систему и выводится на экран.
Пример. Дано число N = 13. Алгоритм работает следующим образом: 1. Двоичная запись числа N: 1101.
2. Сумма цифр двоичной записи 3, остаток от деления на 2 равен 1, новая запись 11011.
3. Сумма цифр полученной записи 4, остаток от деления на 2 равен 0, новая запись 110110.
4. На экран выводится число 54.Какое наименьшее число, большее 80, может появиться на экране в результате работы автомата?
Верный ответ: 86
После первого добавления бита количество единиц становится чётным, поэтому при повторении всегда дописывается 0. Следовательно, автомат получает:
R = 4N, если в двоичной записи N чётное число единиц;
R = 4N + 2, если нечётное.
Ищем не исходное N, а наименьшее число, которое появится на экране и будет больше 80.
N = 20 = 101002: единиц 2, дописываются 00, поэтому R = 10100002 = 80 — не подходит из-за строгого неравенства.
N = 21 = 101012: единиц 3, дописываются 10, поэтому R = 10101102 = 86.
Результаты автомата возрастают вместе с N, поэтому между 80 и этим значением другого результата быть не может.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 18901.
Верный ответ: 1200
Пока хвост поднят, Черепаха перемещается в точку (100; 100) и устанавливает направление −30° к оси Ox. После команды Опусти один блок цикла строит две соседние стороны: 30 и 40. Поэтому два блока замыкают прямоугольник 30 × 40, а оставшиеся повторения только обводят его ещё раз.
Пусть u и v — координаты точки вдоль сторон длиной 30 и 40:
u = (√3/2)(x − 100) − (1/2)(y − 100),
v = −(1/2)(x − 100) − (√3/2)(y − 100).
Строго внутренние точки удовлетворяют условиям 0 < u < 30 и 0 < v < 40. Перебор целочисленных координат в пределах фигуры даёт 1200 точек; точки с равенством в любом из условий принадлежат границе.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 21192.
Верный ответ: 4
Подсказка: сжатый файл занимает 80 Кбайт, а оригинальный больше на 65%, значит его объём равен 80·1024·1,65 байт.
Бит на пиксель: 80·1024·1,65·8 / (512·750) = 2,816.
Можно взять только целое число бит на пиксель, значит максимум 2 бита.
Количество цветов: 22 = 4.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 25514.
1. aaaaa
2. aaaab
3. aaaac
4. aaaad
5. aaaae
6. aaaaf
7. aaaag
8. aaaba
...Запишите слово, которое стоит на 12769-м месте от начала списка.
Верный ответ: fcbea
Так как используется 7 букв, номер слова можно связать с записью числа в системе счисления с основанием 7. Сначала переходим к нумерации с нуля: 12769 − 1 = 12768.
Представим 12768 в семеричной системе:
12768 = 5 · 74 + 2 · 73 + 1 · 72 + 4 · 7 + 0,
то есть получаем 521407.
Сопоставляем цифрам буквы по алфавиту: 0 → a, 1 → b, 2 → c, 3 → d, 4 → e, 5 → f, 6 → g. Цифры 5, 2, 1, 4, 0 дают буквы f, c, b, e, a.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 18985.
Верный ответ: 24
В файле нет строки заголовков: все 1072 значения находятся в диапазоне A1:A1072.
Минимальное значение:
=МИН(A1:A1072) → −29,220221.
Среднее арифметическое:
=СРЗНАЧ(A1:A1072) → приблизительно 4,43858.
Их сумма отрицательна: −29,220221 + 4,43858 ≈ −24,781641. По условию нужен модуль, поэтому получаем приблизительно 24,781641, а затем берём только целую часть — 24.
В одной формуле это можно записать так:
=ЦЕЛОЕ(ABS(МИН(A1:A1072)+СРЗНАЧ(A1:A1072)))
Модуль нужно применять после сложения, а не отдельно к каждому слагаемому: это разные математические выражения.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 19067.
Верный ответ: 2
Файл содержит первую главу, поэтому поиск выполняем по всему его основному тексту. Вводим слово «дань», отключаем учёт регистра и включаем параметр «только слово целиком».
Редактор находит 2 вхождения именно формы «дань». Форма «дани» не подходит, поскольку условие требует конкретную словоформу, а не все формы существительного.
Поиск по части слова «дан» был бы неверным: он мог бы находить и другие слова, содержащие такое сочетание букв.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 19068.
Верный ответ: 240
В номере могут использоваться 33 буквы и 10 цифр, всего 43 различных символа. Все они относятся к одному общему алфавиту.
Для одного символа требуется 6 бит:
2⁵ = 32 < 43 ≤ 64 = 2⁶.
Пять символов номера занимают 5 · 6 = 30 бит.
Для каждого номера выделяется целое число байтов. Три байта содержат только 24 бита, поэтому одному номеру нужны 4 байта.
Для 60 000 номеров потребуется:
60 000 · 4 = 240 000 байт.
Вопрос просит ответ в тысячах байт, поэтому 240 000 байт — это 240 тысяч байт. Делить на 1024 здесь не нужно.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 19069.
| a0 | a1 | ... | am−1 | |
| q0 | команда | команда | ... | команда |
| q1 | команда | команда | ... | команда |
| ... | ... | ... | ... | ... |
| qn−1 | команда | команда | ... | команда |
| λ | Z | |
| q0 | λ, L, q0 | X, L, q1 |
| q1 | λ, S, q1 | X, L, q1 |
| ... | λ | λ | Z | Z | Z | Z | λ | λ | ... |
| ▲q0 |
| ... | λ | λ | X | X | X | X | λ | λ | ... |
| ▲q1 |
| λ | 1 | 0 | |
| q0 | λ, L, q1 | ||
| q1 | λ, S, q1 | 0, S, q1 | 1, L, q1 |
Верный ответ: 124
Пусть справа от последней единицы находятся k нулей. Исполнитель заменит эти k нулей единицами, затем заменит саму единицу нулём и остановится. Поэтому число нулей изменится так: −k + 1.
Чтобы исходных нулей было как можно меньше при конечных 125 нулях, нужно взять минимальное k, то есть k = 0. Это означает, что крайний справа символ сразу является единицей. Программа немедленно заменит его нулём, не уничтожив ни одного исходного нуля.
Следовательно, после работы нулей станет ровно на один больше, чем было: исходное количество равно 125 − 1. Любой ноль на правом конце сначала превратился бы в единицу и потребовал бы увеличить исходное число нулей.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 25518.
Верный ответ: 176
Маска задаёт сеть 23.140.156.0–23.140.159.255; в ней 1024 IP-адреса. В условии сказано именно об IP-адресах сети, поэтому перебираются все адреса, включая адрес сети и широковещательный адрес.
Каждый адрес переводим в 32-битную запись. Срез первых 16 бит соответствует левым двум байтам, последних 16 бит — правым двум. Далее считаем единицы и проверяем условие: left ≥ right.
from ipaddress import ip_network
net = ip_network("23.140.159.160/255.255.252.0", strict=False)
count = 0
for address in net:
bits = f"{int(address):032b}"
left = bits[:16].count("1")
right = bits[16:].count("1")
if left >= right:
count += 1
print(count)Ключевой момент — не сравнивать сами байты как десятичные числа: условие относится к количеству единиц в их двоичной записи.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 21653.
Верный ответ: 9
Преобразуем все степени к основанию 4: 214 = 47, 163 = 46. Получаем 416 − 47 − 46 + 42.
Разность 416 − 47 содержит девять троек в разрядах 7–15. При вычитании 46 занимается единица из 7-го разряда: его цифра уменьшается с 3 до 2, зато в 6-м разряде появляется 3. Поэтому общее количество троек не меняется.
Слагаемое 42 ставит цифру 1 во 2-й разряд и также не добавляет троек.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 19099.
ДЕЛ(x,A)→(¬ДЕЛ(x,28)∨ДЕЛ(x,42))
тождественно истинна (то есть принимает значение 1 при любом натуральном значении переменной х)?
Верный ответ: 3
Импликация ложна, если x одновременно делится на A и на 28, но не делится на 42. Значит, нужно добиться, чтобы любое общее кратное A и 28 делилось на 42.
Разложим числа на простые множители:
28 = 2² · 7,
42 = 2 · 3 · 7.
В числе 28 уже есть нужные множители 2 и 7, но отсутствует множитель 3. Поэтому A обязательно должно добавить множитель 3 в НОК(A, 28).
Наименьшее натуральное число, которое это обеспечивает, — сам недостающий простой множитель.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 18965.
F(1) = G(1) = 1 F(n) = 3 ⋅ F(n–1) + G(n–1) – n + 5, если n > 1 G(n) = F(n–1) + 3 · G(n–1) – 3 · n, если n > 1
Чему равно значение F(14) + G(14)?
Верный ответ: 37282721
Вопрос требует найти сумму F(n) + G(n), поэтому отдельно вычислять обе функции необязательно. Обозначим S(n) = F(n) + G(n) и сложим данные рекуррентные формулы:
S(n) = 3F(n−1) + G(n−1) − n + 5 + F(n−1) + 3G(n−1) − 3n =
= 4(F(n−1) + G(n−1)) − 4n + 5 = 4S(n−1) − 4n + 5.
Начальное значение S(1) = 1 + 1 = 2. Теперь вместо двух функций достаточно последовательно вычислять одну:
s = 2
for n in range(2, 15):
s = 4 * s - 4 * n + 5
print(s)
Такое преобразование не является догадкой: коэффициенты при F(n−1) и G(n−1) после сложения становятся одинаковыми, поэтому они объединяются в предыдущую сумму S(n−1).
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 18885.
Верный ответ: 852 9996
Подходят только числа, для которых истинны сразу все пять проверок: кратность 6, отсутствие кратности 24 и 11, последняя цифра не 4 и две последние цифры не 28.
Последние цифры удобно проверять остатками от деления на 10 и 100:
with open("zadanie_12_17.txt") as f:
a = [int(x) for x in f]
good = [
x for x in a
if x % 6 == 0
and x % 24 != 0
and x % 11 != 0
and x % 10 != 4
and x % 100 != 28
]
print(len(good), max(good))
Операции «не кратно 24» и «не кратно 11» являются двумя отдельными запретами: число отбрасывается при нарушении любого из них. Аналогично отдельно проверяются последняя и две последние цифры. После полной фильтрации остаётся 852 элемента, максимальный — 9996.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 19183.
Верный ответ: 458
Создадим рядом вспомогательный столбец. В первой строке запишем исходное число. Для каждой следующей строки действуем так:
• если текущее число меньше предыдущего, прибавляем его к накопленной сумме убывающего фрагмента;
• иначе начинаем новый фрагмент и записываем только текущее число.
Например, формула имеет смысл «если A2 < A1, то B2 = B1 + A2, иначе B2 = A2». Максимум вспомогательного столбца и будет наибольшей суммой подходящего подряд идущего фрагмента.
Лучший фрагмент расположен в строках 392–395: 144,822483…; 127,005794…; 113,553275…; 73,215392…. Его сумма равна 458,596946…, а по условию требуется записать целую часть, то есть отбросить дробную часть.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 18968.
Для ответа на задания 19-21 изучите предложенный ниже текст.
За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в два раза. Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 61. Победителем считается игрок, сделавший последний ход, т.е. первым получивший такую позицию, при которой в кучах будет 61 или больше камней. В начальный момент в первой куче было 7 камней, во второй куче – S камней; 1 ≤ S ≤ 53.
Верный ответ: 14
С чего начать. Здесь число S нельзя угадывать проверкой готового ответа. Решаем задачу с конца: сначала определяем, какая позиция позволит Ване закончить игру одним ходом, затем выясняем, каким первым ходом Петя мог оставить такую позицию. Для минимального S в первую очередь проверяем два последовательных увеличения второй кучи в 2 раза, потому что именно в ней находится неизвестное S. За два хода эта куча станет равна 4·S, поэтому получаем неравенство 7 + 4·S ≥ 61. Отсюда S ≥ (61 − 7)/4, и первое целое значение равно 14. Это и есть источник первого проверяемого числа. Для S = 13 даже такая самая сильная последовательность даёт 7 + 4·13 = 59, что меньше 61. После нахождения границы остаётся проверить, что первый ход Пети ещё не завершает игру.
Проверка и доказательство.
Требуется существование такого первого хода Пети, который не завершает игру, но оставляет Ване возможность выиграть немедленно.
При S = 14 Петя удваивает вторую кучу: (7, 14) → (7, 28). Сумма 35 меньше 61. Ваня снова удваивает вторую кучу и получает (7, 56); теперь сумма равна 63, поэтому игра заканчивается.
Если S = 13, то даже два последовательных удвоения второй кучи дают 7 + 4 · 13 = 59. Удвоение первой кучи или прибавление одного камня слабее, поэтому при любом меньшем S Ваня не сможет выиграть своим первым ходом.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 18969.
Верный ответ: 23 26
С чего начать. Это задание 20, поэтому решаем его обратным ходом.
1. Сначала отмечаем позиции, из которых игрок выигрывает за один ход.
2. Затем ищем опорную проигрышную позицию: игрок, которому досталась такая позиция, сам сразу не выигрывает, но любой его ход приводит к поражению: соперник либо выигрывает следующим ходом, либо особое правило игры сразу засчитывает поражение ходящему.
3. Начальная позиция подходит Пете, если он не может выиграть сразу, но одним ходом переводит Ваню в такую опорную позицию.
Откуда берутся проверяемые S. Из начальной позиции выписываем все формы первого хода, а затем смотрим, какие из них совпадают с опорными позициями. Для этой игры получаются:
• (14, 23): S = 23, Петя удваивает первую кучу;
• (8, 26): S = 26, Петя прибавляет 1 к первой куче;
Именно обратный переход от этих позиций, а не случайный перебор, даёт числа в ответе.
Проверка и доказательство.
При S = 23 Петя удваивает первую кучу: (7, 23) → (14, 23). После любого хода Вани Петя может сразу получить сумму не меньше 61: обычно достаточно удвоить нужную кучу, а после позиции (14, 46) — добавить один камень к первой.
При S = 26 Петя добавляет камень к первой куче: (7, 26) → (8, 26). После прибавлений или удвоения первой кучи Петя удваивает вторую; после удвоения второй получает (8, 52) и добавляет камень к первой.
Именно позиции (14, 23) и (8, 26) являются проигрышными для игрока, которому предстоит ход: все его продолжения переводят соперника в выигрыш за один ход. Обратный переход к начальной первой куче 7 даёт только S = 23 и S = 26.
Ни при одном из них Петя не достигает порога 61 своим первым ходом.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 18970.
Верный ответ: 2
С чего начать. В задании 21 первым ходит Петя, а стратегию проверяем для Вани. Используем два типа позиций из предыдущих шагов:
• выигрыш за один ход — Ваня сразу достигает победной границы;
• выигрыш за два хода — Ваня переводит Петю в опорную проигрышную позицию и выигрывает после любого ответа.
Подходящее S должно удовлетворять двум условиям: после каждого первого хода Пети Ваня находится на одном из этих двух уровней, но хотя бы после одного хода Пети Ваня не может выиграть немедленно. Последняя оговорка как раз исключает стратегию гарантированной победы первым ходом.
Полный обратный просмотр даёт набор S: 22, 25. Ни одно число здесь не появляется из готового ответа: мы последовательно проверяем все разрешённые первые ходы Пети.
S = 22
• Петя: +1 к первой куче → (8, 22). Ваня не выигрывает сразу, но ходом ×2 первую кучу переводит игру в опорную позицию (16, 22) и гарантирует победу своим следующим ходом.
• Петя: +1 ко второй куче → (7, 23). Ваня не выигрывает сразу, но ходом ×2 первую кучу переводит игру в опорную позицию (14, 23) и гарантирует победу своим следующим ходом.
• Петя: ×2 первую кучу → (14, 22). Ваня не выигрывает сразу, но ходом +1 ко второй куче переводит игру в опорную позицию (14, 23) и гарантирует победу своим следующим ходом.
• Петя: ×2 вторую кучу → (7, 44). Ваня выигрывает сразу: ×2 вторую кучу → (7, 88).
S = 25
• Петя: +1 к первой куче → (8, 25). Ваня не выигрывает сразу, но ходом +1 ко второй куче переводит игру в опорную позицию (8, 26) и гарантирует победу своим следующим ходом.
• Петя: +1 ко второй куче → (7, 26). Ваня не выигрывает сразу, но ходом +1 к первой куче переводит игру в опорную позицию (8, 26) и гарантирует победу своим следующим ходом.
• Петя: ×2 первую кучу → (14, 25). Ваня выигрывает сразу: ×2 вторую кучу → (14, 50).
• Петя: ×2 вторую кучу → (7, 50). Ваня выигрывает сразу: ×2 первую кучу → (14, 50).
Проверка и доказательство.
Подходят S = 22 и S = 25.
При S = 22 ходы Пети ведут в (8, 22), (7, 23), (14, 22) или (7, 44). Последняя позиция даёт Ване немедленную победу, а первые три относятся к позициям, из которых Ваня выигрывает своим вторым ходом.
При S = 25 получаются (8, 25), (7, 26), (14, 25) и (7, 50). Две последние позиции позволяют выиграть сразу, а две первые — не позднее второго хода.
В обоих случаях существует ход Пети, после которого Ваня не может победить немедленно, поэтому гарантии первого хода нет. Обратный анализ всех S даёт ровно два значения.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 18971.

Верный ответ: 19
С чего начать. Обозначим через Ti самый ранний момент завершения процесса с ID i. Если процесс независимый, он запускается в момент 0, поэтому Ti равно его собственному времени выполнения. Если процесс зависит от нескольких предшественников, они могут работать параллельно, но новый процесс обязан дождаться самого позднего из них. Поэтому используется правило:
Ti = время процесса i + max(времена завершения всех его предшественников).
Берём максимум, а не сумму: предшественники выполняются одновременно, а не один за другим.
Независимые процессы: T1 = 2, T2 = 3, T4 = 4, T7 = 4, T9 = 3.
Вычисляем зависимые процессы:
T3 = max(T1, T2) + 5 = max(2, 3) + 5 = 8
T5 = T4 + 3 = 7
T6 = max(T3, T5) + 3 = max(8, 7) + 3 = 11
T8 = T7 + 4 = 8
T10 = T9 + 1 = 4
T11 = max(T8, T10) + 4 = max(8, 4) + 4 = 12
T12 = max(T6, T11) + 7 = max(11, 12) + 7 = 19.
Время завершения всей совокупности — наибольшее из найденных времён:
max(2, 3, 8, 4, 7, 11, 4, 8, 3, 4, 12, 19) = 19.
Критическая цепочка: 7 → 8 → 11 → 12. В процессе 12 приходится ждать ветвь через процесс 11, потому что она заканчивается позже ветви через процесс 6. Складывать длительности всех процессов нельзя: такой способ ошибочно предполагает, что параллельного выполнения нет.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 21193.
Верный ответ: 13
Фраза «ровно одно из чисел 9 и 10» задаёт два непересекающихся случая:
1) траектория проходит через 9 и не проходит через 10;
2) траектория проходит через 10 и не проходит через 9.
Для команд «+1» и «×2» число способов получить n считается по формуле F(n)=F(n−1)+F(n/2) для чётного n и F(n)=F(n−1) для нечётного. Запрещённому числу присваивается 0.
Случай через 9.
Из 2 в 9 существует 5 программ. После 9 нельзя попадать в 10: команда «+1» запрещена, поэтому единственный допустимый первый шаг — 9→18. Далее до 24 остаётся только прибавлять 1. Получается 5 · 1 = 5 программ.
Случай через 10.
Из 2 в 10 без прохождения через 9 существует 2 программы. Из 10 в 24 существует 4 программы. Получается 2 · 4 = 8 программ.
Случаи несовместимы, поэтому количества складываются: 5 + 8 = 13.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 19135.
Верный ответ: 28
Цепочка продолжается до первой позиции, где два соседних символа совпадают. В этой позиции предыдущая допустимая цепочка заканчивается, а второй символ равной пары становится началом новой цепочки.
Пример программы на Python:s = open("zadanie_9_24.txt").read().strip()
start = 0
best = 1
for i in range(1, len(s)):
if s[i] == s[i - 1]:
start = i
best = max(best, i - start + 1)
print(best)
Переменная start хранит начало текущей допустимой подстроки. При равной паре начало переносится на текущую позицию, поскольку включить в новую подстроку оба одинаковых символа нельзя, а один текущий символ включить можно. Разность i - start + 1 даёт её длину.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 19109.
Верный ответ: 1 4671137 2 4671167 3 4671257 4 4671347 5 4671427 6 4671467 7 4671517 8 4671547
С чего начать:
Сначала отбрасываем числа, которые не оканчиваются цифрой 7. Это уменьшает количество проверок на простоту примерно в десять раз.
Почему условие записано как n % 10 == 7:
Остаток от деления целого числа на 10 совпадает с его последней цифрой. После этой проверки функция is_prime ищет возможный делитель до квадратного корня.
Откуда берутся порядковые номера:
Переменная k начинается с нуля и увеличивается только тогда, когда число выполнило оба условия. В список по очереди добавляются k и n. Поэтому print(*answer) выводит последовательность «номер, число, номер, число» с одним пробелом между всеми значениями.
Пример программы на Python 3:
from math import isqrt
def is_prime(n):
if n < 2:
return False
for d in range(2, isqrt(n) + 1):
if n % d == 0:
return False
return True
answer = []
k = 0
for n in range(4671100, 4671562):
if n % 10 == 7 and is_prime(n):
k += 1
answer += [k, n]
print(*answer)
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 19110.
20 3 10 17 15 13 12 11 7 6 4 3 2После выполнения алгоритма на дисках остаётся 0, 1 и 0 единиц, поэтому для примера ответ: 1 2.
Верный ответ: 230 2
Для решения требуется полностью воспроизвести работу скрипта. Простое деление общего объёма архивов на суммарную ёмкость дисков не подходит: часть файлов откладывается из-за распределения свободных промежутков по разным дискам.
Храним массив свободных остатков и индекс диска, с которого начинается проверка очередного архива. После успешной записи индекс переносится на диск, следующий за использованным.
Моделирование:
files.sort(reverse=True)
free = [V] * K
start = 0
for x in files:
for shift in range(K):
d = (start + shift) % K
if x <= free[d]:
free[d] -= x
start = (d + 1) % K
break
free_sum = sum(free)
max_free = max(free)
disk = free.index(max_free) + 1Метод index возвращает первое вхождение максимума, поэтому при равенстве остатков автоматически выбирается диск с наименьшим номером.
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 19030.

Верный ответ:
Первая строка: 23684, 65128
Вторая строка: 72353, 130974
Что требуется сделать и зачем нужна программа.
Это файловое задание. В поле ответа вводятся только четыре числа, но получить их вручную по сотням строк практически невозможно, поэтому координаты обрабатываются программой. Текст программы в ответ не переносится: он служит инструментом для получения чисел.
Шаг 1. Прочитать координаты.
В каждой непустой строке записаны два вещественных числа. В файле используется десятичная запятая, тогда как функция float в Python ожидает точку. Поэтому строка сначала преобразуется командой replace(",", "."), затем разбивается на две части. Каждая точка хранится как кортеж (x, y).
Шаг 2. Разделить точки на кластеры и аномалии.
График в условии является только иллюстрацией и не показывает данные этого варианта. Сначала полезно построить точечную диаграмму по фактическому файлу в электронной таблице. На ней видны плотные группы и отдельные далёкие точки. После этого выбираются границы в пустых промежутках между группами. Эти границы не вычисляются из H и W и не являются единственно возможными: подходят любые условия, которые дают то же разбиение. Аномалию нельзя присоединять к ближайшему кластеру, потому что по условию она не относится ни к одному из них.
Разбиение именно для этих файлов.
В файле A обе аномалии сильно удалены вправо, поэтому рабочие точки удовлетворяют x < 10; кластеры разделяются линией y = 9. В файле B группы находятся в трёх хорошо различимых областях: слева сверху, справа сверху и справа снизу.
В файле A получаются размеры кластеров 92 и 128; две отброшенные точки: (45,65163004; 12,80312744); (36,20448884; 12,13602285).
В файле B получаются размеры кластеров 101, 96 и 445; три отброшенные точки: (−8,042437762; 26,41164858); (37,92318549; 31,48164858); (2,330782238; −25,24265146).
В программе после разбиения стоят проверки assert. Если граница выбрана неверно и количество точек не совпадёт, программа остановится, а не продолжит вычисления с неправильными кластерами.
Шаг 3. Найти центры кластеров.
Центр из условия — это медоид, то есть одна из исходных точек кластера. Он не равен среднему арифметическому координат. Для каждой точки-кандидата программа складывает расстояния до всех точек того же кластера и выбирает кандидата с минимальной суммой. Расстояние до самой себя равно нулю и на выбор не влияет.
Результаты перебора для файла A:
A1: центр (4,29949916; 6,22951182), минимальная сумма расстояний 68,8015003941
A2: центр (6,66792676; 12,74236299), минимальная сумма расстояний 84,1389816252.
Результаты перебора для файла B:
B1: центр (12,21724979; 10,31689525), минимальная сумма расстояний 96,002197273
B2: центр (18,21600372; 14,36225718), минимальная сумма расстояний 87,4241707861
B3: центр (19,52793365; 1,3306858), минимальная сумма расстояний 399,310278016.
Шаг 4. Вычислить величины из условия.
Расстояние по оси x — это модуль разности абсцисс: Px = |6,66792676 − 4,29949916| = 2,3684276. Аналогично Py = 6,51285117. Формула квадратного корня здесь не нужна, потому что требуются две отдельные проекции.
Для файла B уже требуются обычные евклидовы расстояния между каждой из трёх пар центров:
d(B1, B2) = 7,23533011392
d(B1, B3) = 11,5843885803
d(B2, B3) = 13,0974429861.
Минимум равен 7,23533011392, максимум — 13,0974429861.
Как формируется запись ответа.
Функция scale сначала берёт модуль, затем умножает число на 10 000 и применяет int. Это именно взятие целой части, а не математическое округление: использовать round нельзя.
Типичные ошибки.
1) использовать иллюстративный график вместо данных файла; 2) включить аномалию в ближайший кластер; 3) принять средние координаты за центр; 4) сравнить точку с центром чужого кластера при поиске внутреннего радиуса; 5) округлить результат; 6) забыть модуль у координатной величины.
Полная проверенная программа на Python.
Файлы A и B нужно положить в ту же папку, что и программа. Условия разбиения относятся именно к этому варианту.
from math import hypot
def read_points(filename):
points = []
with open(filename, encoding="utf-8-sig") as file:
for line in file:
if line.strip():
x, y = map(float, line.replace(",", ".").split())
points.append((x, y))
return points
def distance(a, b):
return hypot(a[0] - b[0], a[1] - b[1])
def cluster_center(cluster):
# По определению из условия центр обязан быть одной из точек кластера.
best_point = None
best_sum = float("inf")
for candidate in cluster:
current_sum = sum(distance(candidate, p) for p in cluster)
if current_sum < best_sum:
best_sum = current_sum
best_point = candidate
return best_point
def scale(value):
# int после модуля отбрасывает дробную часть, а не округляет.
return int(abs(value) * 10000)
def split_a(points):
clusters = [[], []]
anomalies = []
for p in points:
x, y = p
if x < 10 and y < 9:
clusters[0].append(p)
elif x < 10 and y > 9:
clusters[1].append(p)
else:
anomalies.append(p)
return clusters, anomalies
def split_b(points):
clusters = [[], [], []]
anomalies = []
for p in points:
x, y = p
if 8 < x < 15 and 5 < y < 13:
clusters[0].append(p)
elif 15 < x < 22 and y > 8:
clusters[1].append(p)
elif 15 < x < 25 and y < 5:
clusters[2].append(p)
else:
anomalies.append(p)
return clusters, anomalies
points_a = read_points("27var03A.txt")
points_b = read_points("27var03B.txt")
clusters_a, anomalies_a = split_a(points_a)
clusters_b, anomalies_b = split_b(points_b)
# Эти проверки сразу обнаружат ошибку в границах разбиения.
assert [len(c) for c in clusters_a] == [92, 128]
assert [len(c) for c in clusters_b] == [101, 96, 445]
assert len(anomalies_a) == 2
assert len(anomalies_b) == 3
centers_a = [cluster_center(cluster) for cluster in clusters_a]
centers_b = [cluster_center(cluster) for cluster in clusters_b]
px = abs(centers_a[0][0] - centers_a[1][0])
py = abs(centers_a[0][1] - centers_a[1][1])
center_distances_b = [
distance(centers_b[i], centers_b[j])
for i in range(3)
for j in range(i + 1, 3)
]
q1 = min(center_distances_b)
q2 = max(center_distances_b)
print(scale(px), scale(py))
print(scale(q1), scale(q2))
P.S. Нашли ошибку в задании? Пожалуйста, сообщите о вашей находке ;)
При обращении указывайте id этого вопроса - 25532.