Блог пользователя Kogut_Ivan

Автор Kogut_Ivan, история, 4 месяца назад, По-русски

14 июня пройдет заключительный этап олимпиады Келдыша. Прошли вы или нет можно посмотреть на официальном сайте — https://www.keldysh.siriusolymp.ru/

В прошлом интенсиве уже помогли ребятам отобраться на смену в Сириус и на заключительный этап Келдыша. Теперь время помочь с заключительным этапом! Ниже все подробности

Даты интенсива:

• 28 мая — 1 контест и его разбор

• 29 мая — 2 контест и его разбор

• 1 июня — 3 контест и его разбор

• 2 июня — 4 контест и его разбор

• Присоединиться можно и позже – контесты и записи разборов будут доступны. Но в реальном времени интереснее!)

Формат – максимально приближен к реальной олимпиаде:

• 4 полноценных контеста уровня заключительного этапа Келдыша

• Каждый контест — 6 задач и 4 часа времени

• После каждого контеста — подробный разбор задач от преподавателя

• Разборы с кодом на C++ и обсуждением идей/типовых ошибок

• Все записи, задачи и материалы сохраняются у участников до олимпиады

Для кого подойдет интенсив:

• Ученики 5–8 классов

• Кто прошел на заключительный этап Келдыша или был близок к проходу, например, прошел на смену в Сириусе

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

Преподаватель интенсива — Константин Рычков (EzikBro)

• Двухкратный призер студенческого полуфинала чемпионата мира по программированию ICPC

• Призер Вузовско-академической олимпиады по информатике

• Составитель задач к контестам и олимпиадам, например, к Вузовско-академической олимпиаде по информатике

• Преподаватель в КИТ уже 3-й год и в летних лагерях

• Уже не раз готовил детей к Келдышу — про один из таких кейсов даже писали в канале https://t.me/KogutIvanTutoring/292

Цены:

До 24 мая включительно:

• 7 000 ₽ — стандартный тариф

• 6 000 ₽ — для учеников КИТ и прошлых интенсивов КИТ

После 24 мая:

• 9 000 ₽ — стандартный тариф

• 8 000 ₽ — для учеников КИТ и прошлых интенсивов

За каждого ученика, который пришел от вас — минус 1 000 ₽ вам в любом из тарифов

Как подать заявку и оценить подходит ли формат?

  1. Заполните заявку в форме – https://forms.gle/Jdr5EofWFBzgPhod9

  2. В течение 24 часов мы отправим вам бесплатное видео с разбором задачи уровня заключительного этапа Келдыша — вы сможете оценить сложность/формат задач, посмотреть решение от Кости и понять как проходит разбор

Важно! Количество мест ограничено – так мы гарантируем достаточно внимания каждому в чате и на разборах. Поэтому успевайте занять место!

Успешной подготовки и до встречи на интенсиве ✌️

Полный текст и комментарии »

  • Проголосовать: нравится
  • +31
  • Проголосовать: не нравится

Автор Kogut_Ivan, история, 5 месяцев назад, По-русски

Контесты региона Келдыша и финального отбора на смену Информатика.Юниоры (ступень «Алгоритмы и структуры данных‑1») в Сириус полностью совпадают по задачам и пройдут 18 апреля

И по этому поводу мы проводим 4-недельный интенсив – поможем отточить навыки и уверенно выступить на контесте! Если совсем кратко о формате: 30+ задач уровня и формата предстоящего контеста и их разбор с кодом на C++ и Python, запись всех полезных материалов и живое общение с преподавателем

А теперь подробнее

Старт интенсива:

• Уже был — 16 марта

• Присоединиться можно и сейчас – контесты и записи разборов будут доступны. Но в реальном времени интереснее!)

Формат – максимально приближен к реальной олимпиаде:

  1. 4 недели интенсивной подготовки

  2. Каждый понедельник – новый полноценный контест уровня регионального этапа Келдыша на платформе codeforces: длительность 3 часа, решить можно в удобное время

  3. В конце каждой недели – подробный разбор от преподавателя: прямой эфир с записью, коды задач на C++ и Python для детального разбора

  4. После завершения всех 4 контестов – онлайн QA-сессия с преподавателем: разбор спорных моментов, ответы на накопившиеся вопросы и обсуждение стратегий решения

Для кого подходит интенсив:

• ученики 5–8 классов

• кто участвует или хочет поучаствовать в будущем в Келдыше

• кто участвует или хочет поучаствовать в будущем в отборе на июньскую смену Информатика.Юниоры в Сириусе

• кто хочет поучаствовать в отборе на августовскую смену в Сириусе (по уровню и формату тот же отборочный контест)

Цены:

• 6 000 ₽ – стандартный тариф

• 5 000 ₽ – при приглашении друга (скидка действует пригласившему)

• 5 000 ₽ – для учеников КИТ и их родственников

• 4 000 ₽ – если ученик КИТ/родственник приглашает друга (скидка действует пригласившему)

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

Как подать заявку и оценить подходит ли формат?

  1. Заполните заявку в форме – https://forms.gle/2PZ2RYkgVKJNk5WE9

  2. В течение 24 часов мы отправим вам бесплатное видео с разбором задачи уровня регионального этапа Келдыша – вы сможете оценить сложность/формат задач, посмотреть решение и понять как проходит разбор

Осталось еще 2 контеста до конца интенсива, поэтому всех ждем (доступ к прошлым 2 у вас тоже будет)!

Полный текст и комментарии »

  • Проголосовать: нравится
  • +18
  • Проголосовать: не нравится

Автор Kogut_Ivan, 8 месяцев назад, перевод, По-русски

Мы надеемся, что вам понравился контест! Спасибо вам за участие! Для нас это третий официальный раунд, поэтому мы были бы рады услышать ваши отзывы в комментариях и в мини опросе ниже.

Как вам контест?
Какие задачи вам понравились (можно выбрать несколько)?
Какие задачи вам не понравились (можно выбрать несколько)?

2184A - Социальный эксперимент

Идея: fstilus; разработчик: fstilus

Подсказка
Разбор
Решение

2184B - Песочные часы

Идея: fstilus; разработчик: fstilus

Подсказка
Разбор
Решение

2184C - Огромная куча

Идея: Friendiks; разработчик: fstilus

Подсказка 1
Подсказка 2
Разбор
Решение

2184D - Нечестная игра

Идея: Friendiks; разработчик: Friendiks

Подсказка 1
Подсказка 2
Подсказка 3
Разбор
Решение
Бонус

2184E - Изысканный массив

Идея: fstilus; разработчик: fstilus

Подсказка 1
Подсказка 2
Подсказка 3
Подсказка 4
Подсказка 5
Подсказка 6
Разбор
Решение

2184F - Вишнёвое дерево

Идея: gravitsapa; разработчик: gravitsapa

Подсказки для первого способа
Подсказки для второго способа
Разбор
Решение 1
Решение 2

2184G - Мерзость отрезков

Идея: Friendiks; разработчик: Friendiks

Подсказка 1
Подсказка 2
Подсказка 3
Подсказка 4
Разбор
Решение

Полный текст и комментарии »

Разбор задач Codeforces Round 1072 (Div. 3)
  • Проголосовать: нравится
  • +30
  • Проголосовать: не нравится

Автор Kogut_Ivan, 8 месяцев назад, По-русски

Привет, Codeforces!

Команда ТГ канала @KogutIvanTutoring рада позвать вас принять участие в первом Div. 3 раунде в этом году — Codeforces Round 1072 (Div. 3) во 12.01.2026 17:35 (Московское время). В этом раунде будет 6-7 задач, которые подобраны по сложности так, чтобы составить интересное соревнование для участников с рейтингами до 1600. Однако все желающие, чей рейтинг 1600 и выше могут зарегистрироваться на раунд вне конкурса.

Раунд пройдет по правилам образовательных раундов. Таким образом, во время раунда задачи будут тестироваться на предварительных тестах, а после раунда будет 12-ти часовая фаза открытых взломов, после её завершения все успешные попытки будут перетестированы на успешных взломах. Мы постарались сделать приличные тесты — так же как и вы, мы будем расстроены, если у многих будут падать решения после окончания контеста.

Вам будет предложено 6-7 задач и 2 часа 15 минут на их решение.

Штраф за неверную попытку в этом раунде будет равняться 10 минутам.

Напоминаем, что в таблицу официальных результатов попадут только достоверные участники третьего дивизиона. Как написано по ссылке — это вынужденная мера для борьбы с неспортивным поведением. Для квалификации в качестве достоверного участника третьего дивизиона надо:

  • принять участие не менее чем в пяти рейтинговых раундах (и решить в каждом из них хотя бы одну задачу)
  • не иметь в рейтинге точку 1900 или выше.

Независимо от того являетесь вы достоверными участниками третьего дивизиона или нет, если ваш рейтинг менее 1600, то раунд для вас будет рейтинговым.

Задачи были придуманы и подготовлены частью нашей команды: fstilus, Friendiks, gravitsapa, EzikBro, Boodoochai

Также большое спасибо:

Всем удачи!

UPD. Разбор выложен!

Полный текст и комментарии »

  • Проголосовать: нравится
  • +239
  • Проголосовать: не нравится

Автор Kogut_Ivan, 12 месяцев назад, По-русски

Мы надеемся, что вам понравился контест! Спасибо вам за участие! Для нас это второй официальный раунд, поэтому мы были бы рады услышать ваши отзывы в комментариях и в мини опросе ниже.

Как вам контест?
Какие задачи вам понравились (можно выбрать несколько)?
Какие задачи вам не понравились (можно выбрать несколько)?

2132A - Домашнее задание

Идея: Wileyne; разработчик: Wileyne

Разбор
Решение

2132B - Загаданное число

Идея: fstilus; разработчик: fstilus

Подсказка
Разбор
Решение

2132C1 - Хитрый продавец (простая версия)

Идея: fstilus; разработчик: KotlechkovEgor

Подсказка 1
Подсказка 2
Подсказка 3
Разбор
Решение

2132C2 - Хитрый продавец (сложная версия)

Идея: Boodoochai; разработчик: KotlechkovEgor

Подсказка 1
Подсказка 2
Разбор
Решение

2132D - От 1 до бесконечности

Идея: fstilus; разработчик: fstilus

Подсказка 1
Подсказка 2
Разбор
Решение

2132E - Соревнование по арифметике

Идея: EzikBro; разработчик: EzikBro

Подсказка 1
Подсказка 2
Подсказка 3
Подсказка 4
Разбор
Решение 1
Решение 2

2132F - Рада и Ромашковая долина

Идея: Friendiks, Wileyne; разработчики: Friendiks, Wileyne

Подсказка 1
Подсказка 2
Подсказка 3
Подсказка 4
Разбор
Решение

2132G - Известный балетмейстер

Идея: fstilus; разработчики: fstilus, pskobx

Подсказка 1
Подсказка 2
Подсказка 3
Подсказка 4
Подсказка 5
Подсказка 6
Разбор
Решение

Полный текст и комментарии »

Разбор задач Codeforces Round 1043 (Div. 3)
  • Проголосовать: нравится
  • -133
  • Проголосовать: не нравится

Автор Kogut_Ivan, 13 месяцев назад, По-русски

Привет, Codeforces!

Команда ТГ канала @KogutIvanTutoring рада позвать вас принять участие в Codeforces Round 1043 (Div. 3) во 21.08.2025 17:35 (Московское время) — очередной Codeforces раунд для третьего дивизиона. В этом раунде будет 6-8 задач, которые подобраны по сложности так, чтобы составить интересное соревнование для участников с рейтингами до 1600. Однако все желающие, чей рейтинг 1600 и выше могут зарегистрироваться на раунд вне конкурса.

Раунд пройдет по правилам образовательных раундов. Таким образом, во время раунда задачи будут тестироваться на предварительных тестах, а после раунда будет 12-ти часовая фаза открытых взломов, после её завершения все успешные попытки будут перетестированы на успешных взломах. Мы постарались сделать приличные тесты — так же как и вы, мы будем расстроены, если у многих будут падать решения после окончания контеста.

Вам будет предложено 6-8 задач и 2 часа 15 минут на их решение.

Штраф за неверную попытку в этом раунде будет равняться 10 минутам.

Напоминаем, что в таблицу официальных результатов попадут только достоверные участники третьего дивизиона. Как написано по ссылке — это вынужденная мера для борьбы с неспортивным поведением. Для квалификации в качестве достоверного участника третьего дивизиона надо:

  • принять участие не менее чем в пяти рейтинговых раундах (и решить в каждом из них хотя бы одну задачу)
  • не иметь в рейтинге точку 1900 или выше.

Независимо от того являетесь вы достоверными участниками третьего дивизиона или нет, если ваш рейтинг менее 1600, то раунд для вас будет рейтинговым.

Задачи были придуманы и подготовлены частью нашей команды: fstilus, EzikBro, KotlechkovEgor, Wileyne, Friendiks, Boodoochai, pskobx

Также большое спасибо:

Всем удачи!

UPD. Разбор выложен!

Полный текст и комментарии »

  • Проголосовать: нравится
  • -154
  • Проголосовать: не нравится

Автор Kogut_Ivan, история, 17 месяцев назад, По-русски

Привет, Codeforces!

Команда ТГ канала @KogutIvanTutoring рада позвать вас принять участие в Codeforces Round 1016 (Div. 3) во 08.04.2025 17:35 (Московское время) — очередной Codeforces раунд для третьего дивизиона. В этом раунде будет 7 задач, которые подобраны по сложности так, чтобы составить интересное соревнование для участников с рейтингами до 1600. Однако все желающие, чей рейтинг 1600 и выше могут зарегистрироваться на раунд вне конкурса.

Раунд пройдет по правилам образовательных раундов. Таким образом, во время раунда задачи будут тестироваться на предварительных тестах, а после раунда будет 12-ти часовая фаза открытых взломов, после её завершения все успешные попытки будут перетестированы на успешных взломах. Мы постарались сделать приличные тесты — так же как и вы, мы будем расстроены, если у многих будут падать решения после окончания контеста.

Вам будет предложено 7 задач и 2 часа 15 минут на их решение.

Штраф за неверную попытку в этом раунде будет равняться 10 минутам.

Напоминаем, что в таблицу официальных результатов попадут только достоверные участники третьего дивизиона. Как написано по ссылке — это вынужденная мера для борьбы с неспортивным поведением. Для квалификации в качестве достоверного участника третьего дивизиона надо:

  • принять участие не менее чем в пяти рейтинговых раундах (и решить в каждом из них хотя бы одну задачу)
  • не иметь в рейтинге точку 1900 или выше.

Независимо от того являетесь вы достоверными участниками третьего дивизиона или нет, если ваш рейтинг менее 1600, то раунд для вас будет рейтинговым.

Задачи были придуманы и подготовлены частью нашей команды: fstilus, EzikBro, _icy_, Boodoochai, pskobx, gravitsapa

Также большое спасибо:

Всем удачи!

UPD. Разбор выложен!

Полный текст и комментарии »

  • Проголосовать: нравится
  • +136
  • Проголосовать: не нравится

Автор Kogut_Ivan, 17 месяцев назад, По-русски

Мы надеемся, что вам понравился контест! Спасибо вам за участие! Для нас это первый официальный раунд, поэтому мы были бы рады услышать ваши отзывы в комментариях и в мини опросе ниже.

Как вам контест?
Какие задачи вам понравились (можно выбрать несколько)?
Какие задачи вам не понравились (можно выбрать несколько)?

2093A - Идеальный генератор

Идея: EzikBro

Подсказка 1
Подсказка 2
Разбор
Решение

2093B - Дорогое число

Идея: gravitsapa

Подсказка 1
Подсказка 2
Подсказка 3
Разбор
Решение

2093C - Простое повторение

Идея: pskobx

Подсказка 1
Подсказка 2
Подсказка 3
Разбор
Решение

2093D - Кайфовая таблица

Идея: fstilus

Подсказка
Разбор
Решение

2093E - Мин макс мех

Идея: Boodoochai

Подсказка 1
Подсказка 2
Разбор
Решение

2093F - Хакеры и нейросети

Идея: _icy_

Подсказка 1
Подсказка 2
Подсказка 3
Подсказка 4
Разбор
Решение

2093G - Укоротить массив

Идея: EzikBro

Подсказка 1
Подсказка 2
Подсказка 3
Разбор
Решение

Полный текст и комментарии »

Разбор задач Codeforces Round 1016 (Div. 3)
  • Проголосовать: нравится
  • -22
  • Проголосовать: не нравится

Автор Kogut_Ivan, история, 2 года назад, По-русски

КФ, привет!

В прошлое воскресенье прошел контест в честь дня рождения ТГ канала по алгоритмам и машинному обучению Kogut Ivan Tutoring!

Сам контест доступен по ссылке. Для написания нужно вступить в нашу группу на кф

Основные моменты:

  • 49 человек сделали хотя бы 1 попытку

  • Участие принял чемпион мира ICPC и естественно занял 1 место, хотя он писал в обычном блокноте на компе)

  • Суммарно участники получили 16500 рублей + скидки и бесплатные занятия у преподавателей KIT

Авторы задач:

Спасибо за отрешку:

Спасибо всем, кто участвовал! А тех, кто не участвовал, ждем в следующих наших контестах. Они будут гораздо масштабнее, если вы понимаете о чем я)

Полный текст и комментарии »

  • Проголосовать: нравится
  • +87
  • Проголосовать: не нравится

Автор Kogut_Ivan, история, 2 года назад, По-русски

КФ, привет! Телеграмм каналу про алгоритмы и машинное обучение Kogut Ivan Tutoring уже как 2 месяца назад стукнул 1 год. В честь этого устраиваем контест!

Над контестом работают: Кутузов gravitsapa Артем, Скобелин pskobx Павел, Рычков EzikBro Константин и я — Когут Kogut_Ivan Иван

Основные моменты:

  • Длительность контеста: 3 часа

  • Формат задач: ICPC

  • Формат контеста: индивидуально + онлайн в реальном времени (не виртуальное участие)

  • Дата и время: выбери его ниже в гугл-форме (28.04, 04.05 или 05.05)

Для участия нужно:

  • Быть подписанным на канал Kogut Ivan Tutoring

  • Зарегистрироваться до 23.04 в гугл-форме, указав:

    • ФИО
    • ник в ТГ
    • ник на КФ
    • Удобные для вас даты контеста. Указывайте ВСЕ даты, которые удобны

И самое интересное... Что же за призы? Их количество зависит от количества участников, но туда входят:

  • Денежные сертификаты: ВБ, Озон, Я.Маркет, Steam и т.п.

  • Бесплатные занятия с авторами контеста

  • Скидки на занятия с преподавателями KIT

  • И другое

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

Присоединяйтесь отметить год с нами и зовите друзей и подруг!

Полный текст и комментарии »

  • Проголосовать: нравится
  • +41
  • Проголосовать: не нравится

Автор Kogut_Ivan, история, 3 года назад, По-русски

Автор: Friendiks

Больше про алгоритмы в ТГ канале: https://t.me/KogutIvanTutoring

Пререквизиты

Дерево отрезков, merge sort(сортировка слиянием)

Вступление

Для начала решим такую задачу:

Дан массив размера $$$n$$$, а также $$$q$$$ запросов вида: количество различных элементов на отрезке от $$$l$$$ до $$$r$$$ ($$${l, r} \le n$$$). Для данной задачи существует решение через персистентное дерево отрезков, но его рассматривать мы не будем. Рассмотрим другое решение. Для начала для каждого элемента найдем индекс ближайшего равного ему справа, а если такого нет, поставим большое число(в нашем случае $$$10^9+7$$$, но главное, чтобы оно было больше $$$n$$$) и построим новый массив, который хранит вместо элемента данный найденный индекс(или большое число). Тогда можно заметить, что количество различных чисел на отрезке $$$[l, r]$$$ — это количество чисел на отрезке в новом массиве, больших $$$r$$$. Упражнение для читателя — понять почему это так ;)

Теперь надо научиться искать количество больших на отрезке. Воспользуемся структурой данных Merge Sort Tree.

Merge sort tree

Идея merge sort tree заключается в том, чтобы построить дерево отрезков и в каждой вершине хранить отсортированный отрезок покрытый вершиной. Несложно заметить, что для каждой вершины массивы в ее детях отсортированы и поэтому можно применить слияние как в merge sort и за $$$O(st[l].size()+st[r].size())$$$ получить то, что нам надо. Пример кода для пересчета приведен ниже.

st.resize(st[l].size()+st[r].size()) // размер должен быть равен итоговому размеру, иначе функция merge выдаст ошибку
merge(st[l].begin(), st[l].end, st[r].begin(), st[r].end, st[v].begin())
// v - текущая вершина, l - левый сын, r - правый сын.
// st - вектор, хранящий дерево отрезков

На первый взгляд, кажется, что асимптотика построения и занимаемая память это $$$O({n^2 \log n}$$$), но на самом деле достаточно понять, что каждый элемент массива будет находиться в $$$O(\log n)$$$ отрезках. На каждой высоте мы учтем элемент ровно 1 раз, а так как высота дерева отрезков $$$O(\log n)$$$, то и каждый элемент будет учтен в $$$O(\log n)$$$ отрезках. Из этого можно сделать вывод, что на самом деле асимптотика построения merge sort tree и занимаемая им память $$$O({n \log n})$$$.

Решение задачи с помощью merge sort tree за $$$O({n \log n} + {q \log^2 n})$$$

Решим задачу используя эту структуру. Теперь мы можем дойти до каждой вершины, такой, что она покрывает отрезок, который полностью лежит в отрезке запроса, а потом бинарным поиском найти количество больших $$$r$$$. Как известно, любой отрезок разбивается на $$$O({\log n})$$$ отрезков дерева отрезков, а также бинарный поиск работает за $$$O({\log n})$$$, а значит мы умеем отвечать на запрос за $$$O({\log^2 n})$$$.

Эта асимптотика уже очень хорошая, но можно сделать лучше, и в этом поможет Техника Частичного Каскадирования.

Решение задачи с помощью merge sort tree и техники частичного каскадирования за $$$O({n \log n} + {q \log n})$$$

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

st[v].resize(st[l].size()+st[r].size());
cascad[v].resize(st[l].size()+st[r].size());
merge(st[l].begin(), st[l].end(), st[r].begin(), st[r].end(), st[v].begin());
int i = 0, j = 0;
for(int k = 0; k < st[v].size(); ++k){
    while(i < (int)st[l].size() && st[l][i] < st[v][k]) i++;
    while(j < (int)st[r].size() && st[r][j] < st[v][k]) j++;
    cascad[v][k] = make_pair(i,j);
}

Теперь можно заметить, что для ответа на запрос нужно в корне найти бинарным поиском первый больший либо равный $$$r$$$ (если пишите дерево отрезков на полуинтервалах, а иначе надо искать строго больший). Обозначим найденный элемент за $$$x$$$. Если отрезок лежит не полностью, то при переходе в левого(или правого) ребенка можно передавать $$$x$$$ для ребенка, он будет равен cascad[v][x].first(или second). Иначе, если отрезок полностью лежит в запросе, ответом будет $$$st[v].size() - x$$$ (если считать, что индексы нумеруются с нуля). Можно заметить, что если все элементы меньше, то написанный выше while вернет размер массива и все сработает корректно. Не сложно заметить, что суммарно ответ на запрос теперь работает за $$$O({\log n})$$$, а значит мы решили задачу за $$$O({n \log n} + {q \log n})$$$.

Задачи

Время работы на практике

Несмотря на то, что с каскадированием асимптотика получается лучше чем без каскадирования, но на практике с каскадированием программа работает дольше чем без него.

Нижняя посылка — без каскадирования, а верхняя с каскадированием.

Спасибо за это замечание CtrlAlt

Дополнительно

  • Merge sort tree также может использоваться для поиска k-ой порядковой статистики за $$$O({\log^3 n})$$$ без каскадирования за запрос и за $$$O({\log^2 n})$$$ с каскадированием.
  • Если вместо массивов использовать декартовы деревья, то можно будет изменять элементы за $$$O({\log^2 n})$$$, но придется отказаться от каскадирования.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +42
  • Проголосовать: не нравится