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

Автор niyaznigmatul, 4 года назад, По-русски

Тут короткие разборы и решения задач первого тура отборочного этапа Олимпиады Университета Иннополис, который прошел 24 ноября 2019 года. Порешать задачи можно в тренировках: Отборочный этап Олимпиады Университета Иннополис. Первый тур. 2019-2020

По некоторым задачам разбора нет, и мы еще не знаем, появится ли. Не стесняйтесь обсуждать задачи, может кто-нибудь из сообщества расскажет, как решать задачу.

102436A - Cool Water

Разбор
Решение перебором
Решение формулой

Авторы задачи: Aksenov239 и dusja.ds

102436B - Trie Minimization

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

Авторы задачи: Aksenov239 и iilnar

102436C - Painting Plan

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

Автор задачи: disa

102436D - Subset ``AND''

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

Авторы задачи: VArtem и Aksenov239

102436E - Stamp

Решение за линейное время на C++

Авторы задачи: dusja.ds и pashka

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

»
4 года назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

В задаче C код, который был сдан во время контеста на 66 баллов, при сдаче в тренировках получает МЛ1..

»
4 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Как можно развить следующую идею: давайте предположим, что конечным множеством всех чисел будет множество чисел от $$$0$$$ до $$$k-1$$$. Скажем, что варианта лучше мы найти не можем: взяв в данном множестве любое побитовое И для чисел мы не получим числа меньше нуля, и не получим числа больше $$$k-1$$$. В таком случае, давайте скажем, сколькими способами мы можем получить некоторое число $$$z$$$, где $$$z=a&b$$$, а $$$a$$$ и $$$b$$$ — два числа из нашего множества, при чем $$$z < a$$$ и $$$z < b$$$. В таком случае, каждое $$$z$$$ полученное не более, чем одним способом будет являться ответом на задачу. https://codeforces.com/gym/102436/submission/65681890

  • »
    »
    4 года назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Я написал оптимальную версию этого кода. $$$d_i$$$ это сколько чисел меньше $$$k$$$, которые надмножество $$$i$$$ в битовом представлении. $$$f_i$$$ это сколько пар $$$x$$$ и $$$y$$$ ($$$x, y < k$$$), что их and это $$$i$$$.

    На тесте 519010 60 выдает больше 125 чисел.

    Код
    • »
      »
      »
      4 года назад, # ^ |
      Rev. 3   Проголосовать: нравится +12 Проголосовать: не нравится

      Я нашел баг в прошлом решении, который не проявлялся. Вместо f[i] - d[i] должно быть f[i] - (2 * d[i] - 1), что подсказало, как еще быстрее сгенерить этот список. Если захотеть, можно еще быстрее, мне кажется.

      Код

      До такого решения, как у вас, мы не дошли. Жалко, что лимит только 125 поставили, очень неплохая получилась идея для конструкции.