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

Автор Serjio, 12 лет назад, По-русски

Очень скоро начнется личная олимпиада ИТМО. Клик.

Это будет последний шанс попрактиковаться на задачах от ИТМО перед финалом ИОИП для российских школьников и Всеукраинской олимпиадой по программированию для украинских.

Очень жаль, что эти 2 события совпадают (ИОИП 18 марта и UOI 17 марта) :(

Предлагаю здесь обсудить задачи.

UPD: Контест окончен, можно обсуждать задачи. Приветствуются доказательства решений, а не посты типа "Я расписал пару тесткейсов в Bшке и заметил, что можно отсортировать массив и по-очереди искал среднее арифметическое между двумя соседними, записывая результат в правый элемент". Особенно интересует решение Cшки на 100.

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

»
12 лет назад, # |
Rev. 2   Проголосовать: нравится +9 Проголосовать: не нравится

если по последней отправке не просмотрен результат, то возьмется максимум из нее и всех просмотреных?

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

    Там где scored, тот и возьмется.

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

      Вообще-то нет. Эта фича не работает.

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

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

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

          feedback — да, а scored — нет. у меня знакомая в прошлый раз последний сабмит сделала неудачный(на 0 баллов) и, чтобы не переотправлять, нажала scored на другом(где было > 0 баллов). Зачлось ей 0.

          ну вы же лучше знаете, лол.

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

            зачем вы ее минусуете у меня была такая же проблема.

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

Уже завершилось. Как решать последние 4 задачи? Верно ли, что в А ответ будет N-K, где K — наидлиннейшая неубывающая, заканчивающаяся в N-ом элементе? Почему в B проходит брать на каждом шаге 2 минимальных?

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

    По А могу сказать, что верно. Вот даже накидал корявое доказательство: Мы имеем право менять все элементы последовательности на следующий, при этом не имея право менять последний. Значит нам нужно найти наименьшее количество "мешающих" элементов, чтобы образовать неубывающую последовательность. Очевидно, что наименьшее количество мешающих равно n-k, где k наибольшая неубывающая последовательность. Поскольку нам не на что менять n-ый элемент, то мы должны искать длину такой последовательности, которая включает в себя n.


    Меня самого интересует док-во Bшки, т.к. на контесте запихнул решение по расписанным на бумажке тесткейсам.

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

Как уже сказал автор темы, ИОИП и его трансляция пересекается с Всеукраинской олимпиадой. Для меня, как и для многих других 11-классников, это был последний контест на neerc.imfo.ru/school. Это один из немногих IOI-стайл контестов, которые проводятся регулярно, поэтому на протяжении нескольких лет пытался почаще в них участвовать. Вообще, с нирком связано много приятных моментов...

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

Непосредственно сегодня, контест был очень интересным. Если бы четвертую заменить на последнюю с прошлого контеста, то был бы, наверное, лучший проблемсет в этом сезоне. Несмотря на это, я благополучно завалил >.<

Еще раз спасибо!

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

Задача D отлично подходит для школьного контеста!

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

    Даже слегка недотягивает, эллипс неплохо бы смотрелся и внутри многоугольного футляра :D :D

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

мне кажется, или Б была проще, чем А?

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

в С надо было поддерживать декартовы деревья эйлеровых обходов? или как ее нормально решать?

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

    Во время контеста не довела, но решение вроде правильное, хоть и небыстрое:

    Будем держать необычное дерево отрезков. Для каждого отрезка из дерева (пусть он соответствует отрезку [L, R]) и числа k (от 0 до 10) посмотрим на решение исходной задачи на суффиксе, начинающемся с (L + k)-того символа. От этого нас интересуют две вещи — сколько (возможно, последняя влезет не полностью) подстрок будет выбрано до R включительно, и где закончится последняя (возможно, вылезающая за границу) подстрока. Эти два числа мы и будем хранить в каждой вершине дерева отрезков.

    Обновление предка через детей делается очевидно за ~10 операций, при запросе нам придётся обновить не более 10 листьев. Возможно, это решение можно как-нибудь ускорить

    P.S. а ещё сначала неправильно прочитала условие, и 1.5 часа думала, что надо решить задачу, когда сумма подстроки <= x, может, это тоже вполне разрешимая задача?

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

      да, клево, что-то подобное придумал, но до ума не довел

      кажется, авторское такое же

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

        Интересно, я почему-то думала, что авторское будет быстрее моего, но вроде они даже обновляют также

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

    Там просто корневая. Будем насчитывать next[i] — куда мы попадем, когда проскочим число, начинающееся с i. При изменении символа изменится не более 10 некстов.

    Теперь поделим на кусочки и будем насчитывать finish[i] — куда мы попадем, когда пропрыгаем до конца кусочка из i и ans[i] — за сколько попадем. Теперь мы умеем обновлять за размер кусочка + 10*10 и искать ответ за кол-во кусочков. Ура.

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

      Авторское было такое, как описала iroro, но такое решение тоже хорошее.

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

      не совсем понятно, мы храним целое количество чисел в блоке? вот мы что-то изменили, finish[i] изменился, теперь у нас блок заканчивается в другом месте и следующий начинается тоже в другом, как это изменять.

      или у нас каждое i — это начало какого-то блока длины sqrt(N)? и изменение это изменение всех блоков, которые включают наш символ?

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

        Блоки состоят из символов. finish[i] — это самый правый символ в который мы припрыгаем внутри блока. Т.е. еще один прыжок и мы уже выпрыгнули из блока.

        Это позволяет считать ответ следующим образом:

        • Сначала мы в позиции 1
        • Прыгаем в finish[1]
        • Прибавляем к ответу ans[1]
        • Теперь сделаем в лоб прыжок в следующий блок (next[finish[1]])
        • Прибавляем к ответу 1
        • Теперь мы оказались в k
        • Прыгаем в finish[k]
        • ...

        При изменении мы пересчитваем все finish внутри блока. Они никак не зависят от чисел в других блоках.

        код

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

Добавте пожалуйста в тренировки.

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

пожалуйста, обьясните как решали задачу B?

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

    Отсортировать массив а потом всегда добавлять среднее арифметические первых 2 чисел, а потом удалить эти 2 числа и добавить среднее арифметическое в массив. Делать так пока в массиве не останется 1 число. Это и есть ответ.

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

      Только сейчас увидел, что там N<=200000. А я еще думал, что авторы сделали на первые две группы слабые тесты, что неправильное решение их проходило, а дело то в массиве :(