Блог пользователя ivan.popelyshev

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

Копись вкладик.

Соревнование начнётся в 9 февраля в 20:00 по саратовскому.

Да пребудет с нами Сила!

UPD. Артём крут!

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

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

По Питерскому! =)

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

По Рыбинскому! =)

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

А в D1 450 правильна ли такая динамика: dp[prefix][edgesleft][mask], где mask маска четности последних K?

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

    Да. Нужно только учитывать кратные ребра.

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

      Спасибо, просто я не успел закодить :) А кратные ребра надо учитывать с помощью сочетаний, да?

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

        Да, причем это лучше делать в самом конце, а не в переходах динамики.

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

          эх, походу из-за этого я и не успел докодить, как-то и не дошло, что лучше это делать в конце

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

          А я учитывал при переходах в динамике, вот только она не прошла из-за маленьких массивов:(

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

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

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

    у меня были долгие переходы (за m * 2k), поэтому не зашло.

    UPD а как быстрее делать переходы?

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

    Я не смог довести ее до ума. Проблема вот в чем (уточню сразу — я делал динамику вперед, хотя это не должно быть важно). Мы можем прийти в одно состояние несколькими способами. К примеру, в d[3][0][011] можно прийти из d[2][1][101] и из d[2][1][110]. Переход посчитается дважды, хотя картинка одна.

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

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

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

        Что это значит? Разве в динамике мы не добавляем варианты через прикрепления к последней вершине нового ребра?

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

        Все равно не понимаю. Я добавил еще одно состояние — минимальный левый конец ребра, которое мы можем поставить. Таким образом, по модулю кратных ребер получается всего два перехода — мы либо ставим ребро, либо не ставим. Заработало секунд за 20 до конца, успел даже засабмитить. Но это четырехмерная динамика, а все вроде бы трехмерную писали.

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

          Да, я имел ввиду ровно то что сказал ты, только я себе это представлял с другого конца. У меня 4-ех мерная.

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

forest, RAD, признавайтесь, на чем поломали?

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

    в моей комнате многие ломались на тестах из одной строчки — <<.9.>>, <<9.9>> и <<999>>

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

      Ага, я на тесте "5.." ломаюсь.

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

        А 450 на том что массив больше 64Mb, сразу c SIGKILL валится в арене

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

          Ага. Не знал, что так мало памяти, думал 256 не пожалеют. Потестить не успел, сабмитил за 40 секунд до конца. И все равно там еще и WA было.

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

    У меня человек как-то странно не симетрично обрабатывал концы и свалился на {".45","123"}

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

    333 ..3 я вот так ломал

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

    А у меня один человек делал так. Если строка имеет вид x.y, то он добавлял тот конец, который больше.

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

Во второй задаче див2 троих сломал на тесте 8.9, у самого тоже не проходит этот тест, но потому что скопипастил строчку из соседнего цикла и не сменил индекс, обидно, но будет наука впредь:(

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

Блин я сейчас заплачу. Быстро сдал 300 и 450. Был 30м придумал 1000ю не дописал. Сделал первый в жизни челендж, а за ним и второй. Был видимо в топ25 и упала medium из-за одного символа (8->9)

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

    Такая-же лажа с 450, только 9 -> 10 :) забыл условие if (p != N) а далее было d[..][p + 1][...]

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

Какой верный ответ на 111,1.1 ? Почему не 5? Или там эта ерунда получается не круглая?

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

    во-первых она не должна быть круглой, во-вторых нужно найти максимально качественную непрерывную последовательность => 4

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

      Я понял, что раз цепочка, то будет круглая, и специально сделал 5... Блин, третье место ушло и я дальше в div-2 =/
      UPD Просто интересно, кто-нибудь еще понял ее так же?

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

        5 челенджей, хорош! =)

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

          Да там еще было 3 неудачных, именно из-за этого неправильного понимания. Если бы правильно понял этот момент, вышел бы на 2 место.

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

        Цепочка — круглая, а цепь — не круглая? :)

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

          Google translate в одном месте сказал, что он делает украшение, а не просто цепь =) Первая же ассоциация, что цепь-украшение круглая.

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

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

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

    Можно либо 1111.1, либо 1.1111, обе непрерывные последовательности будут равны 4.

    UPD. Не круглая, да.

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

Засабмитил 1000 в последнюю минуту, на макстесте работала 1990мс :)

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

    рубаха парень ^^

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

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

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

      Я умею решать за n^2 на количество упорядоченных разбиений m. Это не очень много, только там какие-то веселые коэффициенты из факториалов и цешек лезут. не дописал.

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

        А, то есть это немного? Блин.

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

          Ключевое слово упорядоченных. Их 250000 примерно. Но из-за этой упорядоченности начинаются проблемы с подсчетом скольки неупорядоченным состояниям соответствует это.

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

      У меня O(n2 * m2 * k) Состояние динамики — n,m,k, и сколько утят типа k обязано присутствовать в каждой строке — пусть это A. Переход — перебираем минимальное кол-во утят в каждой строке и количество строк, в которых их именно столько. Ещё хитрость в том что сначала в d[n,m,k,A] хранится кол-во вариантов если A-это то самое минимальное количество, а потом суммированием точный параметр превращается в ограничение снизу.

      И еще по параметру k я сжимал динамику по памяти, так как значения для k пересчитываются из k - 1

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

        Если не ошибаюсь, то можно решить за O(n * m^2 * k + n^2) за 2 функии динамики.

        Первая функция f(n) — ответ. Определим количество вариантов первой строки при условии следующий различных между собой, вычтем возможность идентичности первой строки с какой-либо другой, используем формулу включений-исключений

        f(n) = f(n — 1) * a(1) — 1! * f(n — 2) * C(n — 1, 1) * a(2) + 2! * f(n — 3) * C(n — 2, 2) * a(3) — ...

        где a(i) = g(i, m, 0)

        Вторая функция g(n, m, k) — количество способов сделать n идентичных строк длины m, начиная с k-го номера

        g(n, m, k) = C(m, 0)^n * g(n, m, k + 1) + C(m, 1)^n * g(n, m — 1, k + 1) + ...

        Сам не проверял, но вроде все правильно. Только под конец раунда придумал

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

Что-то изи как-то активно попадала.

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

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

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

      Я писал с сортом, в итоге у меня довольно сложный код, ладно, в какой-то момент упростил, и то УГ)

      А перебрать все пары i=/=j за квадрат по-моему как раз-таки легко и где там набажить не понятно)

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

        Ага, вот только если в массиве одна строка, это может не сработать. Например, {"11."}. Поломал два таких решения.

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

SysTest... Up... Up... Up =)

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

Поздравляю RAD с победой в СРМе!

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

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

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

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

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

Кто-нибудь может помочь с идеей в div 2 950? Знаю, что в div 1 такой задачи не было, но в дивизионе решило только 2 человека, и хотелось бы услышать разные идеи :)

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

    Динамика по профилю.

    Аналогично задаче симпатичных узорах.

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

    А на ТС зайдет 2^17*100*8 в 2 секунды? Если да, тогда решение ДП по изломаному профилю, dp[i][j][mask] — где і,j = номер строчки и столбца, а mask — битмаска где хранится чётность клеточёк.

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

      А можно подробнее, почему 2^17 и что вообще в этом случае представляет из себя маска?

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

        у меня было 2^16 * 100 * 8, смотри дп d[rowsCnt][col][mask][cntmask]. rowscnt до 100, от этого параметра можно избавиться просто заменяя массивы, ибо нам нужно только две последовательные "строки" этого массива (d_old[col][mask][cntmask], d_new[col][mask][cntmask]). Каждый слой представляет собой ломаную штуковину типа
        000XXXX
        XXX0000
        в данном случае излом в col = 3, (если от 0 считать). в случае col = 0, у нас первая строка из крестиков, а вторая из ноликов. Крестики представляют собой то, чему соответсвуют биты масок. Первая маска говорит о том, что в данной позиции что-то есть (если соответсвующий бит равен 1) или пусто. Вторая маска говорит для каждого крестика чётность стоящих рядом непустых клеток, из тех, для которых мы уже определили значение. Давай рассмотрим что происходит на примере приведённого выше профиля. Я переобозначу клетки так
        000AXXX
        XXBC000
        сейчас, мы должны назначить значение клетке C, для этого переберём возможные варианты (пусто, занято). Заметим, что если в клетке A не пусто, то мы можем поставить значение единственным образом, т.к. клетка С это последний сосед клетки A. После того как мы поставили сюда что-то (или не поставили) мы переходим к профилю
        0000XXX
        XXXX000
        и нужно обновить или совсем заменить значения некоторых битов в обоих масках. т.к. он соответсвует уже другой клетке. например сейчас это произошло с битом номер 3(если с нуля считать) соответсвовало клетке A, а теперь стал соответствовать клетке B. полное решение смотри в практис румах юзера Alias_Prudaev

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

      У меня зашло N × M × K × 22K = 1000 × 8 × 216. За 1.7 секунды, правда, но зашло:). Так что это и вовсе должно заходить.

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

So, I hope you enjoyed the problems :)

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

Вот что я реально не понимаю, так это в чём у меня ботва в 1000... http://community.topcoder.com/stat?c=problem_solution&rm=311450&rd=14725&pm=11766&cr=22452815

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

    может

    res = 0
    

    поменять на

    res = ma[n][m][k][minFirst+1]
    

    и зайдёт?

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

      Логично предположить, что это число прибавляется в первой итерации последующего цикла

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

        Тогда меняй константу 51 на 52, а то по при minFirst=51 будет выход за границы ДО того как ты проверишь что minFirst>m .

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

          Да, действительно будет. Спасибо.

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

а по Topcoder'y есть какой нибудь поиск по тегам? Порешать задачи на такие-то и такие-то темы?

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

Зашёл на топкодер, удивился: почему-то 532-й раунд исчез из рейтингов. На арене так же. Не локальный глюк, вроде. Кто-нибудь наблюдает то же самое?

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

    То же самое. На сайте написано, что следующий SRM — 533ий и будет 18ого. Скорее всего скоро пофиксят.