Алгоритмы

948 задачвместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: ✓ успешные, ✗ неуспешные.
СЕКРЕТНО
Дело VOIDLINKER · Эпизод 7 из 13
Артефакт в памяти
ИСТОЧНИК: core dump процесса voidlinker_payload
ИЗ ПЕРЕХВАЧЕННОЙ ПЕРЕПИСКИ:
«Эксплойт упал, дамп памяти у вас. Внутри — обрывки моих формул. Я работаю на минимальном диалекте: цифры от 1 до 5 и три операции — +, −, *. Найди в дампе самое длинное корректное арифметическое выражение. — V.»
ФОРМАЛЬНАЯ ЗАДАЧА

Определите максимальное количество символов в непрерывной последовательности, которая является корректным арифметическим выражением: числа из цифр 1–5, между числами ровно один знак +, − или *, выражение начинается и заканчивается числом. Если корректных выражений нет — выведите 0.

ВХОДНЫЕ ДАННЫЕ

Одна строка до 105 символов.

ВЫХОДНЫЕ ДАННЫЕ

Одно целое число.

СЕКРЕТНО
Дело VOIDLINKER · Эпизод 6 из 13
Двойная сигнатура
ИСТОЧНИК: readme.md в дампе malware
ИЗ ПЕРЕХВАЧЕННОЙ ПЕРЕПИСКИ:
«Сигнатура моего малвара двойная, для понта. Подстрока 2026 (год моего расцвета) появляется не менее 75 раз, и буква X — ровно 90 раз. Оба условия в одном непрерывном куске — и это мой модуль. Найди самый длинный. — V.»
ФОРМАЛЬНАЯ ЗАДАЧА

Определите максимальное количество идущих подряд символов, среди которых подстрока 2026 встречается не менее 75 раз и при этом содержится ровно 90 букв X. Если такого окна нет — выведите 0.

ВХОДНЫЕ ДАННЫЕ

Одна строка длиной до 3,5·105 символов.

ВЫХОДНЫЕ ДАННЫЕ

Одно целое число.

СЕКРЕТНО
Дело VOIDLINKER · Эпизод 5 из 13
Управляющий пакет
ИСТОЧНИК: служебный канал voidlinker-c2.onion
ИЗ ПЕРЕХВАЧЕННОЙ ПЕРЕПИСКИ:
«Мой кастомный протокол элегантен: каждый управляющий пакет заканчивается одной нечётной цифрой — маркер конца. Внутри пакета только чётные цифры и буквы, среди букв — ровно 45 контрольных байт K. Других нечётных внутри нет, иначе это мусор. Найди мой самый длинный управляющий пакет. — V.»
ФОРМАЛЬНАЯ ЗАДАЧА

Определите максимальное количество идущих подряд символов, среди которых ровно 45 букв K, последовательность заканчивается нечётной цифрой и не содержит других нечётных цифр, кроме последней. Если такой последовательности нет — выведите 0.

ВХОДНЫЕ ДАННЫЕ

Одна строка из заглавных букв и цифр, до 2,5·105 символов.

ВЫХОДНЫЕ ДАННЫЕ

Одно целое число.

СЕКРЕТНО
Дело VOIDLINKER · Эпизод 4 из 13
Шифроблок
ИСТОЧНИК: darknet.onion / #incident-leak / 31.10.2026 14:09
ИЗ ПЕРЕХВАЧЕННОЙ ПЕРЕПИСКИ:
«Слушай, я придумал красивый шифр. Каждый блок данных обёрнут синхросигналом — цифра 7, и в каждом валидном блоке она встречается ровно 60 раз. Не больше, не меньше. Между блоками — мусор. Найди в дампе самый длинный непрерывный участок с ровно 60 семёрками — это мой самый объёмный шифроблок. — V.»
ФОРМАЛЬНАЯ ЗАДАЧА

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

ВХОДНЫЕ ДАННЫЕ

Одна строка длиной до 2·105 символов.

ВЫХОДНЫЕ ДАННЫЕ

Одно целое число — длина найденной последовательности.

СЕКРЕТНО
Дело VOIDLINKER · Эпизод 3 из 13
Слив ключей
ИСТОЧНИК: pastebin.cyberone.local / voidlinker-leak.txt
ИЗ ПЕРЕХВАЧЕННОЙ ПЕРЕПИСКИ:
«Слышал, у вашего DevSecOps ротация API-ключей раз в полгода? Жаль, что я уже выгрузил их на пастбин. Формат у вас удобный: KEY-XXXX-XXXX-XXXX, заглавные и цифры. Найди их в моём посте — и отзови. Или не отзови. — V.»
ФОРМАЛЬНАЯ ЗАДАЧА

Найди все API-ключи формата KEY-XXXX-XXXX-XXXX, где X — символ из A–Z или 0–9. Ключ должен быть отдельным словом (не часть TURNKEY-...). Выведи все найденные ключи в порядке появления.

ВХОДНЫЕ ДАННЫЕ

Произвольный текст до 105 символов.

ВЫХОДНЫЕ ДАННЫЕ

Каждый ключ на отдельной строке.

СЕКРЕТНО
Дело VOIDLINKER · Эпизод 2 из 13
Хронометраж
ИСТОЧНИК: darknet.onion / 31.10.2026 14:38
ИЗ ПЕРЕХВАЧЕННОЙ ПЕРЕПИСКИ:
«Я работал ровно пятнадцать минут: с 14:00:00 до 14:15:59. Всё, что вне этого окна — твои false positives, аналитик. Если найдёшь все мои моменты в логе — может, подскажу, куда ушли деньги. Может. — V.»
ФОРМАЛЬНАЯ ЗАДАЧА

В журнале событий найди все временные метки формата YYYY-MM-DD HH:MM:SS, где дата ровно 2026-10-31 и время в окне 14:00:00–14:15:59 включительно. Выведи их по одному на строку, в порядке появления.

ВХОДНЫЕ ДАННЫЕ

Произвольный текст до 105 символов.

ВЫХОДНЫЕ ДАННЫЕ

Каждый timestamp на отдельной строке.

СЕКРЕТНО
Дело VOIDLINKER · Эпизод 1 из 13
Первый след
ИСТОЧНИК: darknet.onion / #incident-leak / 31.10.2026 14:09
ИЗ ПЕРЕХВАЧЕННОЙ ПЕРЕПИСКИ:
«Junior, ты только сел за свой access.log, да? Я уже пробежал по твоей сети с десятка адресов. Они там, прямо перед твоим носом. Спорим, ты не вытащишь их все? Я даже не маскировал IP — просто чтобы ты попотел над регулярками. — V.»
ФОРМАЛЬНАЯ ЗАДАЧА

На стандартный вход подан произвольный текст лога. Найди все IPv4-адреса и выведи их по одному на строку в порядке появления (включая повторы). IPv4-адрес — четыре числа от 0 до 255 без ведущих нулей, разделённые точками (192.168.0.1 — да, 192.168.001.1 — нет).

ВХОДНЫЕ ДАННЫЕ

Произвольный текст в UTF-8 (несколько строк, до 105 символов).

ВЫХОДНЫЕ ДАННЫЕ

Каждый IPv4-адрес на отдельной строке. Если адресов нет — пустой вывод.

На числовой прямой даны \(n\) отрезков. Нужно выбрать минимальное количество точек на прямой так, чтобы каждый отрезок содержал хотя бы одну из выбранных точек.

Точка \(x\) принадлежит отрезку \([l, r]\), если \(l \le x \le r\) (концы включены).

Формат входных данных

В первой строке — целое число \(n\) (\(1 \le n \le 10^5\)).

В каждой из следующих \(n\) строк — два целых числа \(l_i\) и \(r_i\) (\(-10^9 \le l_i \le r_i \le 10^9\)) — концы очередного отрезка.

Формат выходных данных

Одно целое число — минимальное количество точек.

Примечание

В первом примере четыре отрезка: \([1, 6]\), \([2, 8]\), \([7, 12]\), \([10, 16]\). Точки \(x = 6\) и \(x = 10\) вместе попадают в каждый из отрезков: \(6\) — в первые два, \(10\) — в последние два. Меньше двух точек не хватит — отрезки \([1, 6]\) и \([10, 16]\) не пересекаются, одной общей точки у них нет.

Во втором примере все три отрезка содержат точку \(x = 5\), так что одной точки достаточно.

На числовой прямой даны \(n\) отрезков. Для каждой неупорядоченной пары отрезков \((i, j)\) рассмотрим длину их пересечения. Если отрезки не пересекаются — длина пересечения равна нулю.

Найдите сумму длин пересечений по всем парам.

Формат входных данных

В первой строке — целое число \(n\) (\(1 \le n \le 10^5\)).

В каждой из следующих \(n\) строк — два целых числа \(l_i\) и \(r_i\) (\(-10^9 \le l_i \le r_i \le 10^9\)) — концы очередного отрезка.

Формат выходных данных

Одно целое число — сумма длин пересечений по всем неупорядоченным парам отрезков. Ответ может не помещаться в 32-битный тип.

Примечание

В первом примере три отрезка: \([0, 10]\), \([2, 6]\), \([8, 15]\).

  • Пересечение первого и второго — \([2, 6]\) длины \(4\).
  • Пересечение первого и третьего — \([8, 10]\) длины \(2\).
  • Пересечение второго и третьего пусто.

Сумма: \(4 + 2 + 0 = 6\).

Во втором примере четыре одинаковых отрезка длины \(10\). Каждая из \(\binom{4}{2} = 6\) пар даёт пересечение длины \(10\), итого \(60\).

На числовой прямой даны \(n\) отрезков. Назовём глубиной отрезка \(i\) количество отрезков \(j\) (включая сам отрезок \(i\)), которые целиком его содержат: \(l_j \le l_i\) и \(r_i \le r_j\).

Найдите максимальную глубину среди всех данных отрезков.

Формат входных данных

В первой строке — целое число \(n\) (\(1 \le n \le 5000\)).

В каждой из следующих \(n\) строк — два целых числа \(l_i\) и \(r_i\) (\(-10^9 \le l_i \le r_i \le 10^9\)) — концы очередного отрезка.

Формат выходных данных

Одно целое число — максимальная глубина.

Примечание

В первом примере отрезок \([3, 4]\) содержится в \([2, 5]\), который, в свою очередь, содержится в \([1, 10]\). Глубина \([3, 4]\) равна \(3\): его содержат он сам, \([2, 5]\) и \([1, 10]\). Это максимум.

Во втором примере все три отрезка совпадают, и каждый «содержится» в каждом — глубина равна \(3\).

На числовой прямой даны \(n\) отрезков. Требуется разбить их на минимальное число групп так, чтобы внутри каждой группы любые два отрезка не пересекались. При этом стыковка концом-к-началу пересечением не считается: отрезки \([a, b]\) и \([b, c]\) могут попасть в одну группу.

Найдите минимальное возможное число групп.

Формат входных данных

В первой строке — целое число \(n\) (\(1 \le n \le 10^5\)).

В каждой из следующих \(n\) строк — два целых числа \(l_i\) и \(r_i\) (\(0 \le l_i < r_i \le 10^9\)) — концы очередного отрезка.

Формат выходных данных

Одно целое число — минимум групп.

Примечание

В первом примере отрезки \([0, 30]\), \([5, 10]\), \([15, 20]\), \([25, 35]\). В одну группу можно положить \([5, 10]\), \([15, 20]\) и \([25, 35]\) — они попарно не пересекаются. Отрезок \([0, 30]\) пересекается с каждым из них и требует отдельной группы. Итого: \(2\).

Во втором примере отрезки \([10, 20]\) и \([20, 30]\) стыкуются по точке \(20\), и по условию это не считается пересечением. Поэтому одной группы достаточно.

На числовой прямой задан целевой отрезок \([L, R]\) и \(n\) отрезков-«покрывал». Определите, покрывают ли эти \(n\) отрезков целевой отрезок целиком — то есть каждая точка из \([L, R]\) принадлежит хотя бы одному из них.

Формат входных данных

В первой строке — два целых числа \(L\) и \(R\) (\(-10^9 \le L \le R \le 10^9\)) — концы целевого отрезка.

Во второй строке — целое число \(n\) (\(1 \le n \le 10^5\)).

В каждой из следующих \(n\) строк — два целых числа \(l_i\) и \(r_i\) (\(-10^9 \le l_i \le r_i \le 10^9\)) — концы очередного отрезка-покрывала.

Формат выходных данных

Выведите YES, если каждая точка целевого отрезка \([L, R]\) покрыта хотя бы одним из данных отрезков, и NO иначе.

Примечание

В первом примере отрезки \([0, 4]\), \([3, 7]\), \([6, 10]\) вместе покрывают всю цель \([0, 10]\) без пропусков.

Во втором примере между точками \(4\) и \(6\) есть пропуск (точка \(5\) не покрыта ни одним отрезком), поэтому ответ NO.

На числовой прямой нарисованы \(n\) отрезков. Отрезки могут пересекаться, накладываться или совпадать. Точка прямой считается закрашенной, если она принадлежит хотя бы одному отрезку.

Найдите суммарную длину закрашенной части прямой.

Формат входных данных

В первой строке — целое число \(n\) (\(1 \le n \le 10^5\)).

В каждой из следующих \(n\) строк — два целых числа \(l_i\) и \(r_i\) (\(-10^9 \le l_i \le r_i \le 10^9\)) — концы очередного отрезка.

Формат выходных данных

Одно целое число — длина объединения всех данных отрезков.

Примечание

В первом примере отрезки \([1, 5]\) и \([3, 7]\) сливаются в один отрезок \([1, 7]\) длины \(6\). Отдельный отрезок \([10, 12]\) добавляет ещё \(2\). Итого: \(8\).

Во втором примере четыре отрезка стыкуются концом-к-началу и образуют один сплошной отрезок \([0, 4]\) длины \(4\).

На числовой прямой нарисованы \(n\) отрезков. Концы отрезков заданы целыми числами. Точка \(x\) считается принадлежащей отрезку \([s, f]\), если \(s \le x \le f\) (концы включены).

Найдите такую целую точку \(x\), которой одновременно принадлежит максимальное количество данных отрезков. Если таких точек несколько, выведите наименьшую из них.

Формат входных данных

В первой строке записано целое число \(n\) (\(1 \le n \le 10^5\)) — количество отрезков.

В каждой из следующих \(n\) строк записаны два целых числа \(s_i\) и \(f_i\) (\(-10^9 \le s_i \le f_i \le 10^9\)) — концы очередного отрезка.

Формат выходных данных

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

Примечание

В первом примере отрезки \([0,1]\), \([0,2]\), \([1,2]\). Точка \(x = 1\) принадлежит всем трём отрезкам, и это наименьшая такая точка.

Во втором примере точка \(x = 1\) принадлежит двум отрезкам: \([0,1]\) и \([1,3]\). Это максимум, достигаемый раньше всего на прямой.

Ночью на сибирской трассе одновременно сошло \(n\) снежных заносов. Каждый занос перекрывает участок дороги между километровыми отметками \(a_i\) и \(b_i\) включительно. Сообщения о заносах поступали диспетчеру по рации в произвольном порядке, поэтому \(a_i\) может оказаться как меньше, так и больше \(b_i\): занос покрывает все километровые отметки от \(\min(a_i, b_i)\) до \(\max(a_i, b_i)\) включительно.

К утру с трассы поступили \(m\) запросов от водителей. Каждый водитель называет километровую отметку \(p_j\), на которой он сейчас находится, и просит сообщить, сколько заносов перекрывают этот километр. Помогите диспетчеру быстро ответить на все запросы.

Формат входных данных

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n, m \le 50\,000\)) — количество заносов и количество запросов.

В следующих \(n\) строках записаны по два целых числа \(a_i\) и \(b_i\) (\(-10^9 \le a_i, b_i \le 10^9\)) — концы участка \(i\)-го заноса в произвольном порядке.

В последней строке через пробел записаны \(m\) целых чисел \(p_1, p_2, \ldots, p_m\) (\(-10^9 \le p_j \le 10^9\)) — километровые отметки, о которых спрашивают водители.

Формат выходных данных

Выведите \(m\) целых чисел через пробел: для каждой отметки \(p_j\) — количество заносов, перекрывающих этот километр.

Примечание

Точка считается принадлежащей участку с концами \(a\) и \(b\), если выполняется неравенство \(\min(a, b) \le p \le \max(a, b)\). Совпадение с границей засчитывается.

Ты ввёл silvertests.ru в адресной строке и нажал Enter. В каком порядке всё происходит?

  1. HTTP-запрос → DNS → HTTP-ответ → отрисовка
  2. Отрисовка → HTTP-ответ → DNS → HTTP-запрос
  3. DNS → HTTP-ответ → HTTP-запрос → отрисовка
  4. DNS → HTTP-запрос → HTTP-ответ → отрисовка

Тренер школьной команды программистов готовится к турниру. В школе всего \(n\) учеников, у каждого есть свой рейтинг \(p_i\) — количество очков, набранных на тренировках.

На турнир нужно отправить ровно \(k\) учеников. Сила команды оценивается как суммарный рейтинг её участников. Тренер хочет, чтобы суммарный рейтинг был максимально возможным.

Помогите тренеру определить, чему равен этот максимальный суммарный рейтинг.

Формат входных данных

В первой строке — два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)) — общее количество учеников и размер команды.

Во второй строке — \(n\) целых чисел \(p_i\) (\(0 \le p_i \le 10^9\)), разделённых пробелами, — рейтинг каждого ученика.

Формат выходных данных

Одно целое число — максимальный суммарный рейтинг команды.

Примечание

В первом примере нужно выбрать трёх учеников из пяти. Лучше всего взять с рейтингами 8, 5 и 3 — в сумме 16.

Во втором примере в команду идут все четверо учеников, поэтому ответ — сумма всех рейтингов.

Библиотекарь расставляет книги на полке длиной \(W\) сантиметров. У него есть \(n\) книг; \(i\)-я книга имеет размеры \(a_i \times b_i\) сантиметров.

Каждую книгу можно поставить на полку двумя способами: одной стороной к соседней книге (тогда она занимает вдоль полки \(a_i\) сантиметров) или другой стороной (тогда \(b_i\) сантиметров). Способ расстановки выбирается для каждой книги независимо.

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

Помогите ему определить это максимальное число книг.

Формат входных данных

В первой строке — два целых числа \(n\) и \(W\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le W \le 10^{14}\)) — количество книг и длина полки.

В следующих \(n\) строках — по два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 10^9\)) — размеры \(i\)-й книги.

Формат выходных данных

Одно целое число — максимальное количество книг, которые можно расставить на полке.

На стройплощадку нужно перевезти доски. У бригадира есть грузовик с длинным узким кузовом длиной \(L\) сантиметров — доски укладываются в кузов в один ряд вдоль кузова. На складе лежат \(n\) досок; каждая доска имеет две стороны: толщину \(a_i\) и ширину \(b_i\) сантиметров.

Каждую доску можно положить в кузов двумя способами: плашмя (тогда она занимает вдоль кузова \(a_i\) сантиметров) или на ребро (тогда \(b_i\) сантиметров). Способ укладки выбирается для каждой доски независимо.

Бригадир хочет за один рейс увезти максимальное количество досок. Какие именно — неважно: нужно лишь максимизировать число досок в кузове. Суммарная длина уложенных досок не должна превышать длины кузова.

Определите это максимальное число.

Формат входных данных

В первой строке — два целых числа \(n\) и \(L\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le L \le 10^{14}\)) — количество досок на складе и длина кузова в сантиметрах.

В следующих \(n\) строках — по два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 10^9\)) — размеры сторон \(i\)-й доски в сантиметрах.

Формат выходных данных

Одно целое число — максимальное количество досок, которые можно увезти за один рейс.

Примечание

В первом примере выгодно каждую доску укладывать той стороной, которая короче. Тогда доски займут 2, 4, 3 и 1 см — всего 10 см, помещаются все 4.

Во втором примере даже самая тонкая доска толще кузова, ни одну доску положить нельзя.

Школьник Тимур участвует в серии онлайн-соревнований по программированию. За весь год проходит \(n\) соревнований, и Тимур заранее знает, сколько очков он может набрать в каждом из них: за \(i\)-е соревнование он получит \(s_i\) очков.

По правилам рейтинга, в итоговую сумму идут только \(k\) соревнований по выбору участника (остальные просто не засчитываются). Тимур хочет выбрать такие \(k\) соревнований, чтобы получить максимальную суммарную сумму очков.

Помогите ему вычислить эту максимальную сумму.

Формат входных данных

В первой строке — два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 10^5\)) — общее количество соревнований и сколько из них идут в зачёт.

Во второй строке — \(n\) целых чисел \(s_i\) (\(0 \le s_i \le 10^9\)), разделённых пробелами, — количество очков за каждое соревнование.

Формат выходных данных

Одно целое число — максимальная суммарная сумма очков за \(k\) выбранных соревнований.

Примечание

В первом примере из пяти соревнований с очками \(1, 5, 3, 8, 2\) надо выбрать три. Лучше всего взять соревнования с очками 8, 5 и 3 — в сумме 16.

Во втором примере в зачёт идут все соревнования, так что ответ — сумма всех очков.

Поделиться
Класснуть