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

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

The USACO 2012 US Open contest is available April 6 through April 9. The contest is available in three divisions: bronze, silver, and gold. The contest is 5 contiguous hours in length. Предлагаю после окончания обсуждать тут задачи, всем удачи!

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

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

The problems were good :)

I hope the results will be soon.

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

Я так понимаю, контест уже закончен. Кто как решал задачу про веревку (Gold)?

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

    Я сделал там O((2^n)*m). Для каждой маски искал, зацепиться ли за нее или нет (при этом учитывал все точки маски вместе), а также зацепиться ли за какую-то из подмасок данной маски (тогда и за текущую точно зацепится).

    Тогда нужно для вертикального "отрезка" проверять, убежит ли Бесси или нет. Для этого я искал сколько переходов слева от "отрезка" было сделано сверху вниз, а сколько снизу вверх, если оно ровно — значить убежит, иначе — нет.

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

    А ты?

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

      У меня вообще шаманство, которое я не доказывал. Я для каждой фиксированной маски проверял, можно ли убежать, следующим образом. Рассмотрим все тройки последовательных точек. Если в треугольнике с вершинами в этих точках не лежит ни одного столба из маски, то удаляем центральную точку из трех. Повторяем это упрощение до тех пор, пока можем. Если осталось 2 точки, то убежать можно, иначе — нет. Если аккуратно писать, то можно за O(2^N * M) реализовать.

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

    Вывел N/2. И решал 2-3ю :)

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

      Я думал, я один так решал :D

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

        У меня еще один знакомый, не долго думая, вывел рандом приближенный к этому числу(по идеи такое могут вообще на 0 поставить если будет 2 раза прогоняться на тестах) :)

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

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

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

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

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

    Вот статья про это http://arxiv.org/pdf/1203.3602v1.pdf , но как перевести картинку в это самое слово я так и не придумал =(

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

Кто как писал 3ю? У меня 3^N с кучей отсечений, пару тестов должно затаймить(например, когда все числа равные).

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

    У меня 3^N, но я не смог придумать как его сломать. Мое решение. На 20-ти равных четных не ТЛ-ит.

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

      20 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 На ideone на таком тесте работает 3.7 секунд.

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

    Ну у меня решение за O(3^k * 2^(N-k) + 3^(n-k)). Для N = 20 выбирал k = 7. Решение следующее: разделим всех коров на 2 группы, в первой группе k коров, во второй N-k. Для обеих групп переберем все пары (маска, подмаска) и найдем суммарный баланс между коровами, попавшими в подмаску и коровами, попавшими в маску, но не попавшими в подмаску. После этого запомним пары (маска, баланс). Затем отсортируем и сделаем unique, т.е. уберем повторы. Переберем все пары (маска, баланс) из меньшей группы. Для каждой пары переберем все пары из второй группы, для которых баланс в сумме с нашим дает 0. Ясно, что таких пар не более 2^(N — k).

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

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

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

      Такое же решение, правда долго не думал, k взял равное половине N.

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

    Просто для каждой маски смотрел, сколько у неё подмасок и сколько существует масок с суммой равной её половине. Ну и потом пробегал по тому, чего меньше.

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

      А не валится на тесте 20 2, 2, 2 .. 2 ?

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

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

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

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

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

      I whish this discussion was not only in russian. I have a solution to divide set X into A (N/2 cows) and B (N-N/2) cows. For each subset C of A (the same for B) I count each possible value of any subset of C. Then for each subset E of N cows I divide it into A1 and B1 such that A1+B1 = E and A1 is the subset of A and B1 is the subset of B. I check each value for A1 and look for the appropriate value in B1 — if I find it, it means that E can be equally divided.

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

        I'll repeat mine in English omiting technical details — basically for each subset A I iterate through all subsets B so that sum(A) = 2 * sum(B) and if then A is good

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

        Meet in the middle — this is the key, I got the same solution as described in analysis :)

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

      А оно без никаких дополнительных эвристик успевает? Можно код глянуть?

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

        Не совсем понятно. Локально работает 2 с небольшим секунды, на сервере ТЛ 4 для Java. Посмотрим

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

        2 таймлимита в итоге