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

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

25 февраля в 14:00 состоится очередная личная школьная интернет-олимпиада http://neerc.ifmo.ru/school/io/

На этот раз мы приготовили вам:

  1. Более сложный набор задач (ближе к уровню РОИ), надеемся, что он будет интересным.
  2. Условия на русском и на английском языке.
  3. Небольшой бонус в официальном web-client'е :)

К сожалению, во время этого раунда не будет работать PCMS2 Java Client.

P.S. На задачах этой олимпиады также проводится соревнование на школьных сборах в Давосе, куда приехали школьники из различных стран, в т.ч.России — Davos I-CUP.

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

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

А какой еще бонус?

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

Бонус, это попытки? :)

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

    а что в них будет отображаться?

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

      теперь возможно смотреть исходный код посылки как в Ejudge

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

        эх, лучше бы уж токены добавили

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

          лучше бы web-клиент работал...

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

            а если бы задачи были, то вообще супер

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

              Только что выложили. Извиняемся за задержку.

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

                А если PCMS2 Web Client не будет работать, то как отправлять. Я по другому не знаю.

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

А не школьники вне конкурса могут решать?

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

Я один не могу зайти в клиент? Выводит: неверный логин или пароль, хотя пароль сохранен в браузере и никаких ошибок быть не может.

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

    Да-да, практически одновременно с тобой написал об этом ниже :)

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

      Снова все стало на свои места. Кстати, вопросы жюри можно посылать только через почту?

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

    отвисло

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

Почему-то Web Client не пускает в систему, хотя ввожу правильный логин и пароль. У кого-нибудь еще такое есть?

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

    А я не могу отправить задачу, выдает ошибку. Error You must select the problem you have solved. Что это может быть?

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

      Надо выбрать задачу? Ваш Кеп.

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

        Я не первый раз участвую. Все выбираю как надо. Позвонил другу у него без проблем все отправляет. Я отправлял 2 разные задачи на каждую из них пищет одно и то-же.

        UPD: Проблема была в Explorer, под Opera все отправилось, а то у меня уже паника началась.

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

Как Б решалась?

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

Расскажите, как решать ВСЕ задачи.

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

    На 1-ю задачу я писал бор по битам.

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

      да да, так же делал

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

      Тоже писал бор по битам, но почему-то у меня 40. У кого-нибудь еще есть такое? Вот код

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

        возможно я ошибаюсь, но не из за того у вас 1<<31 и это вываливается за тип?

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

          Да, это вываливается за тип. Возможно из-за этого. Спасибо.

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

    я писал маленькое извращенство с set и lower_bound: для каждого a[i] сохранил в set < int, int > nums[r] его суффикс, начинающийся в r. Потом с помощью этой информации отвечал на запрос для b[i]: во-первых, инвертируем его, потом смотрим первый слева бит, который на том же месте где-то был в a[i], потом пытаемся после него жадно добавлять биты правее.

    UPD да уж, видимо где-то набажил.

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

По-моему, в этот раз, организаторы перестарались со сложностью задач...

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

    Более сложный набор задач (ближе к уровню РОИ), надеемся, что он будет интересным.

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

    Написано, что эти задачи по уровню близки к РОИ.

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

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

      На РОИ не будет участников, занявших здесь первые 6 мест :)

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

    Нет, задачи хорошие. Большой плюс авторам.

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

задачи конечно хороши, соответсвуют уровню

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

А вот и результаты. Быстро :-)

Как решалась D на полный балл ?

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

    У меня почти-перебор прошел на 100.

    Сначала прочитаем все запросы (то есть, решение оффлайн).

    Будем составлять пути от меньшего к большему. То есть, мы перебираем все простые пути в порядке возрастания длин пока не найдем все ответы. Самый маленький путь — очевидно самое маленькое из ребер. Дальше возможны варианты — добавить к текущему-самому-маленькому-пути какое-нибудь ребро которое примыкает к одному из концов пути, или взять за очередной путь еще какое-нибудь ребро. Сам этот перебор путей легко реализовать, например, кучей. Теперь, когда у нас есть какой-то путь, то смотрим в какие моменты времени обе вершины одинакового цвета (оба города поддерживают одинаковую партию) и на основании этого будем изменять ответ.

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

    Код

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

      Интересно, Гена тоже такое писал? Я писал ровное O((N+M+K)*log(N)).

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

        Как Гена решал я не знаю :) Для того, чтобы сломать по TL мое решение, возможно, есть тесты. Можешь рассказать как за O((N+M+K)*log(N))?

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

          Да. Заметим что путь имеет длину не более чем 2, что очевидно от обратного. Теперь для каждой вершины будем знать 2 дерева отрезков(по минимуму расстояний) по вершинах соседних с данной, одно для тех кто сейчас 1го типа 2е для 2го, понятно что в сумме элементов не много. Дальше есть 4 способа создать маршрут, либо через одну вершину, либо вообще ребро. Понятно что с помощью деревьев искать два минимальных элемента не сложно. Теперь допустим мы встретили обновление. Обновим данную вершину для всех соседних и обновим ответ для самой вершины. Теперь осталось только каждый раз быстро знать минимум для всех вершин, с этой подзадаче тоже хорошо справляется дерево отрезков, так-как ответ может ухудшиться.

          На С++ с векторами не сложно написать, но для меня была проблемой запихнуть деревья отрезков в линейную память.

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

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

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

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

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

                Ах, не заметил, что только раз менять вершину можно..спасибо.

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

            Если есть рёбра A-B и B-C, то из путей A-B, B-C и A-B-C как минимум один подойдёт, поэтому достаточно рассматривать только самый короткий путь длины 2. Проще всего это сделать, добавив ещё одно ребро A-C для этого пути (с весом, равным сумме весов A-B и B-C) и теперь рассматривая только пути длины 1. В остальном вроде так же.

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

              А новых ребер не много будет? Ну например если граф — дерево и все вершины находится на расстоянии 1 от корня. Тогда новых ребер по идеи будет квадрат, или я не так понял?

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

                Нет, в граф добавляется ровно одно ребро, соответствующее кратчайшему пути длины 2.

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

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

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

В субботу, 3 марта 2012 года в 14:00 состоится внеочередная интернет-олимпиада по задачам РОИ 2011 по правилам той олимпиады (с обратной связью и группами тестов), проводимая для тестирования новых возможностей проверяющей системы. Будем рады вашему участию!

Там будет первый или второй тур?

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

    А какая разница? Заранее прорешать? :)

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

Предполагалось ли, что задачи на сегодняшнем контесте отсортированы по возрастанию сложности (A — самая простая, D — самая сложная)?

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

    для каждого всегда по разному) но то что Д сложнее всех это да.

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

как решать С на 100?

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

    Будем делать стандартную проверку на правильность и как только нашли символ который все портит, проверим его. То-есть проверим все 5 вариантов. Потом перевернем строку и сделаем тоже самое.

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

      а зачем переворачивать?

      и код можете показать?

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

        Потому-что мой алгоритм ставит только закрывающие скобки.

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

          тогда не совсем понятно, почему 5 вариантов

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

            всего у нас есть 6 различных скобок, а всех, кроме одной (которая уже стоит), 5

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

              Если алгоритм такой, можно вроде только 2-3 варианта рассмотреть.

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

            я для гарантии рассматривал.

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

Расскажите кто-нибудь как тестировать задачи с чекером, где ответ не однозначен. В данном случае задача С.

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

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

    UPD: Сорри, не так понял вас =)

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

      Дак там, вроде, есть готовый чекер в архиве с тестами. Я просто им пользоваться не умею вот и спрашиваю.

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

        привет, Вань! можно попробовать оттестить с помощью тестилки тимуса, но это вроде проблемно, легче самому чекер встроить в программа, самому написать

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

          Привет. Я сам тестером тимуса пользуюсь когда ответ однозначен. Тут да, несложно написать свой чекер. Но проще один научиться пользоваться чекером из архива с тестами, чем каждый раз писать свой.

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

            ну там надо указать имя чекера, не?

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

              Самый простой способ — положить в папку задачи свое решение, переименнованное как %имя задачи%_%любой суффикс%.%расширение%, например, competition_sp.java, потом в папке tests запустить команду docheck %указанный суффикс% (в данном случае docheck sp). В решениях жюри суффикс — инициалы авторов.

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

Как правильно решалась задача В?

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

    я решил так: пусть для каждой строки xi — это мальчики стоящие на нечетных позициях, и yi — на нечетных

    отметим, что четные строки (с четной длиной) очередность не меняют, так же, если в наборе строк есть хотя бы одна нечетная строка (с нечетной длиной), то четные строки мы можем расставить так, чтобы по максимуму задействовать мальчиков в этой строке, то если для четной строки выполняется xi ≥ yi поставить ее перед первой нечетной строкой, иначе, после первой нечетной строки, т.о. можем сразу выкинуть из рассмотрения четные строки.

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

    теперь надо как-то оптимально расставить строки на нечетный позиции! всего нечетных позиций . пусть xi > yi, (i — какая либо нечетная строка) то очевидно, что этого мальчика выгодно поставить на нечетную позицию. пусть таких строк v, тогда возможны 3 случая:

    v = t ну тут все очевидно, просто берем эти строки

    v < t тогда возьмем v этих строк, остальные, очевидно, выгодно взять такие, что yi - xi минимально, чтобы минимизировать потери на четных позициях

    v > t тогда возьмем эти первые t строк, у которых xi - yi максимально, это оптимально так как, если мы попытаемся поменять какие-то строки, стоящие на нечетной и четной позиции, мы не улучшим ответ

    на самом деле, все эти 3 случая сводятся к обычной сортировке по xi - yi

    вот код

    такое вот длинное, извратское, но надеюсь, понятное решение