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

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

Сегодня в 15:00 состоится SRM 544.

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

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

Опять не прислали письмо -- будет совсем мало народу :(

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

Возможно, письмо не прислали из-за проблем, которые обсуждаются тут. Проблема с сабмитом задач.

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

    А кстати это действительно еще не пофиксили.
    UPD. А теперь похоже пофиксили.

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

      А вот сейчас в админской уже два человека опять жалуются.

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

Как жаль, что письмо не прислали :(

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

Меня одного пугают ресубмиты Petr а?

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

    Пугают? Наверное, только тебя.

    P.S. Ну или я чего-то не понимаю: нашёл ошибку, перепослал, потом сломал людей на этом.

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

    Да меня тоже :)

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

Как решать 500?

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

    Жадно. Посмотрим на верхний правый угол, выделим в нём максимальную диаграмму Юнга (фигурку, где мы идём только вниз и вправо) из нулей, и откусим её дополнение.

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

      А почему это правда?

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

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

        Грубо говоря,

        111       111
        2 1       2 1
        22222  -> 22111
          1 2       2 1
          112       222
        
        • »
          »
          »
          »
          »
          12 лет назад, # ^ |
            Проголосовать: нравится +3 Проголосовать: не нравится

          Это-то понятно. А почему жадность работает?

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

            Потому что применим это к оптимальному ответу — получится ответ, имеющий такой вид.

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

        Потому что:

        1) Если мы в какой-то ход инвертируем более правые клетки, чем по данному алгоритму, то ситуация явно не улучшится (правые клетки вообще нет смысла трогать)

        2) Каждая единичка должна быть инвертирована хоть раз.

        3) Соответственно получаем множество клеток, которые должны быть инвертированы хоть раз — все единички, а также все клетки левее и/или ниже.

        4) Любую пару инверсий можно заменить на пару инверсий: объединение и пересечение инвертируемых множеств.

        5) таким образом, любой набор инверсий можно заменить на другой такой набор, что в него будет входить инверсия, соответствующая первому ходу данного алгоритма.

        6) Далее по индукции =)

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

Заходит ли в 500-ке такая жадность: до победного выбираем цепочку из верхних-правых единичек и инвертим?

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

    Я не смог сгенерировать тест, дающих больше 99 операций...

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

      Потому что такая жадность гарантированно даёт алгоритм за 99 операций.

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

      Ответ можно легко сверху оценить как 2*h*w=5000. Каждую единичку можно красить по отдельности, пусть это и неоптимально.

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

А как у всех была матрица 4*4 в 900-ке? У меня почему-то была 13*13, и это не заработало в упор.

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

    А откуда 13й элемент? Я думал нужно 12.

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

    Динамика за O(n): считаем f1, fx, fy, fxy. По названиям вроде понятно, что есть что (количество, суммы x и y, ответ). Далее это нехитрыми формулами пересчитывается. Поворот же есть изменение координат (x, y) --> (y, x) с какими-то знаками.

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

      А все. я долбак. Нужно было 16. Мне приятнее писать формулы, еще зафиксировав направление.

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

        Мне тоже, но я решил, что 16*16 — слишком много, поэтому сделал для 4*4.

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

      Мне не очень понятен переход от x * y * cnt до суммы иксов и игриков, можно привести рассуждения сводящие одно к другому?

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

        Добавьте в состояние направление. Тогда сумма просто явно очевидно выписывается с учетом того, что (x+1)y = xy+y. А дальше можно сжать назад в 4. Только лично мне не понятно зачем.

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

          Что-то я не понял как она очевидно выписывается. Ну да ладно, подожду разбора.

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

            fxy, 0 = S * fxy, 0 + L * fxy, 1 + R * fxy, 3 + S * fy, 0
            fy, 0 = S * fy, 0 + L * fy, 1 + R * fy, 3 + dy0 * f1, 0

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

    Мне хватило 4на4 — очки, сумма х-координат, сумма у-координат и число точек.

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

если 500 действительно так элементарно решается, то как же тогда решается 275?

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

мне одному кажется, что 500 была проще 275?

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

Тест { 0, 0, 0 } валидный для 275?

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

    да
    ответ -1 конечно)

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

    Насколько я понял, валидный, но ответ на него -1.

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

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

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

        хм, а я понял его как "количество голосовавших должно быть положительно"
        UPD он валидный хотя бы потому, что я тестил его в арене :)

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

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

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

          А арена разве проверяет тест на валидность и соответствие ограничениям?

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

            Когда взламываешь — да.

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

              а когда сам тестирую свой код?

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

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

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

Как доказать оценку на макс.ответ в easy div1?

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

    Тоже интересует то же. ;)

    А что ответа до сих пор нет, да ещё в комплекте с тем, что на TopCoder Forums до сих пор нет ветки "SRM 544" и задать вопрос в правильном месте нельзя... вообще создаёт всякие нехорошие подозрения типа <<а точно ли у авторов есть доказательство?>>.

    И вообще интересный матч — по крайней мере в 275 и 500 надо кодить совершенно очевидные алгоритмы совершенно не очевидной правильности. Я не говорю, что это плохо. Но необычно. И заставляет очень хорошо прочувствовать особенность формата соревнований (проверка в конце, пройти должно все тесты).

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

      Я для себя подумал, что если ответ есть, то он лежит в диапазоне n * 100 * 2, мне это было как-то интуитивно понятно. Для доказательства нужны формулы для верхней/нижней оценки на число голосующих при заданном проценте и количестве голосующих, но я их не выводил а искал бинпоиском.

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

верно в 275 такое решение (отправил от безысходности): перебираем ответ до миллиона (допутим), находим для каждого элемента его минимальное и максимальное возможное значение, проверяем, что минимальное значение действительно меньше максимального, суммируем минимальные значния и максимальные и в конце смотрим, что ответ лежит между минимальной и максимальной суммой?

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

    Ну других я вроде не видел.

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

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

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

        или неправильно обрабатывали 0

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

        не подскажешь контртест на непроверку min<=max ?

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

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

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

            Ага, доказал вроде бы тоже сейчас, гуд.

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

        Ещё можно не проверить, что минимальное значение получилось неотрицательным.

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

        Нет, это потому, что забывали проверять, что минимальное значение не меньше 0, а максимальное — не больше числа голосующих

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

          Причем, снизу, как оказалось, достаточно.

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

SystemTest когда начнется?

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

    Он уже, вроде как, давно закончен. Это у них так медленно обновляются результаты в арене.

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

      Я конечно все понимаю, но как они сделали что первая комната показалась, а потом все ждет не знаю уж там чего?

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

        Причем это уже несколько последних СРМов так.

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

        Вот такой у них отличный софт

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

Можете объяснить как решается 1000 задача второго дивизиона?

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

    Ну дп очевидно. Мы одновременно перебираем каким образом могла быть построена колода во время первой фазы, и каким образом она могла быть разобрана в течение второй фазы. Состояние характеризуется четвёркой чисел (i, j, a, b) i и j это сколько чисел из начальной колоды алисы и боба мы выложили в общую колоду в первой фазе, a и b это сколько чисел мы выложили из общей колоды в колоды алисы и боба. мы производим действия одновременно, поэтому на каждом шаге у нас i + j == a + b, отсюда выходит порядка 50^3 состояний ДП. переход осуществляется за O(1) : мы знаем i и j, таким образом мы знаем какое число лежит сейчас наверху каждой из начальных колод, одно из этих чисел мы можем положить в колоду, также мы знаем те числа которые мы можем изъять из колоды на этом шаге. Понятно объяснил?
    UPD: Почти то что я описал можно увидеть в решении PEIN, только он не запаривается о размерах массива, а так и сделал 50^4 ну и в обратном порядке выполняет действия, чтобы рекурсивно считать.

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

      Не совсем понял.

      Для состояния хранится количество вариантов в это состояние попасть. В каждое состояние можно попасть из четырех: (i-1; j; a-1; b), (i-1; j; a; b-1), (i; j-1; a-1; b), (i; j-1; a; b-1). Как проверить, что переход в одно из следующих возможен понятно.

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

      UPD: где можно это решение посмотреть?

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

        Я не понял чего ты не понял. Ты понял что есть состояния, ты понял как построить переходы. Что еще нужно? Давай посмотрим на граф, где вершины это состояния.
        "В каждое состояние можно попасть из четырех: (i-1; j; a-1; b), (i-1; j; a; b-1), (i; j-1; a-1; b), (i; j-1; a; b-1). Как проверить, что переход в одно из следующих возможен понятно."
        Этими словами ты описал как направлены рёбра, ты также знаешь условия при которых ребро есть или отсутствует. Например при выполнении некоторого условия у нас может быть ребро из (i-1, j, a-1, b) в (i, j, a, b).
        граф ацикличен в силу того, что сумма i+j+a+b только возрастает если двигаться по ребрам. тебе нужно посчитать число способов добраться из вершины (0, 0, 0, 0) в (X0, X1, X2, X3) как это сделать? ДП, такое дп ты писал не один раз я думаю. Например можно поставить 1 в (0, 0, 0, 0) и бфсом приплюсовывать эту величину к тем вершинам, в которые ведут рёбра. Можно делать с помощью рекурсивного дп, рассчитывать это в обратном направлении, как это сделал PEIN. И да, прямо таки бфс нам здесь не нужен, ведь мы можем разбить граф на слои по значению суммы i + j
        UPD: бфс не годится для произвольного ацикличного графа, не знаю почему я так написал, но в общем это классическая задача о подсчёте количества путей.

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

        В арене топкодера, Practice Rooms