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

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

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

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

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

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

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

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

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

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

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

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

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

Как решать 500?

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

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

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

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

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

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

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

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

        Потому что:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • »
    »
    14 лет назад, скрыть # ^ |
    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 ну и в обратном порядке выполняет действия, чтобы рекурсивно считать.

    • »
      »
      »
      14 лет назад, скрыть # ^ |
      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: где можно это решение посмотреть?

      • »
        »
        »
        »
        14 лет назад, скрыть # ^ |
        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: бфс не годится для произвольного ацикличного графа, не знаю почему я так написал, но в общем это классическая задача о подсчёте количества путей.

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

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