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

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

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

Предлагаю обсудить здесь задачи контеста.

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

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

Расскажите, пожалуйста, как решать A и C.

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

    А. Я просто выводил 32 буквы a и 32 буквы b в первой строке и 32 буквы c и 32 буквы b по второй строке =)

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

      Корректность доказать можешь?

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

        Да. Просто первые тридцать два слагаемые будут равны нулю (если брать по модулю 2^32). А остальная часть строк совпадает.

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

    A? printf("aaaaaaaaaaaaaaaaaaaaaaa\naaaaaaaaaaaaaaaaaaaaaaaa\n");

    а в C нужно для каждого слова составить маску — в какие строки она входит. после этого оставить только пары с уникальными масками, их будет не более 2^12. получается задача проорить минимальное количество чисел, до полной маски 111..111, можно динамикой за квадрат: минимальное количесво для получения маски M из первых N чисел.

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

    В А находим две строки состоящих только из букв 'a' разной длины с одинаковым хешем. Я честно не знаю, почему это правильно. Код
    В С для каждого слова посчитаем маску — в каких текстах оно встречается (можно это за O(L*lgL) сделать map'ом, где L — размер ввода). После этого для каждой маски выпишем слово которое ей соответствует, получится не более 2^N слов. Тогда можно посчитать F[i] — минимальное количество слов, чтобы покрыть маску i (те, которые встречаются в тех текстах, где в i единички). Ответ тогда F[2^n-1]. Код

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

      Ну в А же множилка после некоторой степени обнуляется.

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

    Мы просто генерили рендомные строки по 10 символов, пока не нашлись 2 с одинаковым хешом.

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

      Да, на разборе было альтернативное решение — т. к. модуль 2^32 не очень большой, то можно сгенерировать 2^16 различных слов и по парадоксу дней рождения хотя бы у двух из них будут одинаковые хэши. Но, конечно, было проще заметить, что т. к. p — всегда четное, то при строке длиной больше 32 символов множители у первых букв будут делится на 2^32, т. е. давать по модулю 0, чего хватало для того, чтобы вывести две строки формата "одна различающаяся первая буква и еще штучек 40 одинаковых".

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

        можно сгенерировать 2^16 различных слов и по парадоксу дней рождения хотя бы у двух из них будут одинаковые хэши с высокой вероятностью

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

          На самом деле, вы правы, я тут посчитал, вероятность будет всего 39%. Вот если сгенерировать 2^18 строк, то она возрастет до 99.9%, чего, думаю, хватит.

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

как адекватно решалась D?

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

    Я решал динамикой. [длина][состояние] — кол-во различных различных строк текущей длины и удовлетворяющему текущему состоянию.

    Состояний всего 4.

    0 — строка является префиксом A и B.

    1 — строка является префиксом A и меньше B.

    2 — строка является префиксом B и больше A.

    3 — строка больше A и меньше B.

    Для каждого состояния рассматривается несколько случаев, они довольно очевидны. А дальше собираем ответ из состояний 3. А также из состояний 2, когда префикс еще не является самой строкой B.

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

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

      ведь можно было избавиться от нулевого состояния, удалив общий префикс строк?

      и в таком решении нужно опасаться чего-то? переполнения или чего-нибудь? а то такое же решение ва18

      и вообще, можете код показать?

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

        Да, можно и так. Переполнение там есть. Если значение в каком-то состоянии динамики стало больше 10^9, то я приравнивал его к 10^9.

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

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

          сразу как написал, понял, что у меня состояние, в котором строка равна префиксу строки А, существует в длине большей длины А =(, исправил, получил ва27, хотя ровным счетом, тоже самое делаю

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

    Мы решали просто перебором по длинам и для каждой длины l смотрели, сколько строк такой длины попадает между первой и второй строкой из инпута. Для этого можно из количества строк длины l, меньших второй, вычесть количество строк длины l, не больших первой. Единственное "но" — сами эти количества могут быть очень большими, поэтому лучше просто пересчитывать разность как diff[l]=diff[l-1]*26+s2[l-1]-s1[l-1].

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

      Можно было сразу считать между двумя строками. Если результат больше 109, то обрезать его до 109. Правда там еще надо аккуратно рассмотреть случай, когда у нас всего одна строка данной длины. У нас подсчет количества строк длины len делался за O(N) и из-за этого ловили ТЛ. Чтобы сильно не модифицировать, мы бинпоиском нашли количество длин для которых возможна всего одна строка, а дальше уже перебирали остальные длины.

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

Как решать E? WA 21 постоянно.

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

    Тоже был WA #21, если писать dfs. А если писать bfs по обратным ребрам с той же логикой (сначала добавляем выигрышные / проигрышные, и постоянно пополняем вершинами для которых уже становится все очевидно и т.д.), то заходит.

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

      А можно тест, где dfs не работает?

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

        Ну вы рёбра, по которым получился цикл считали за ничейные при рассмотрении некоторых вершин наверняка, а это неверно.

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

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

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

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

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

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

        Мы, чтобы не особо париться, прошлись два раза, в итоге не было разбора случая с попаданием в текущую вершину. Как DFS мог TLилться — не понимаю, ведь на жабе наше зашло. Решение у нас было, как на разборе — запускаемся из всех вершин-нулей и для каждой вершины смотрим, сколько у нее переходов в вершины с единичками или двойками, если единичек больше или равно (n + 1)/2, то метим вершину единичкой, а если двоек больше, чем n / 2, то двойкой, где n — количество переходов из вершины. Ну а в конце смотрим, какой цифрой помечена вершина s.

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

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

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

Как решать I?

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

    Мы решали построив суф. дерево по второму набору разделив строки #. Вроде хешами она сдавалась.

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

      А как хешами? Бин. поиском для каждого слова с проверкой хешами?

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

        Хешами — очень просто, Используем примитив "lcp двух подстрок чего-то из того, что дано на вход, за log length", с его помощью умеем сравнивать 2 любых суффикса за log их длины. Дальше сортим все суффиксы 2ого набора и ищем там бинпоиском суффиксы первого набора (наверное, можно было его тоже посортить и merge сделать). Итого n log^2.

        Мне гораздо более интересно (в очередной раз :) ), как ее все суфдеревом посдавали. Неужели все настолько круты, что суфдерево с такой скоростью по памяти пишут? Чувствую себя неполноценным олимпиадником :(

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

          Зачем по памяти? Можно же с бумажки перепечатать :-)

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

            И принести с собой бумажку с суфдеревом? :) По правилам распечатывать во время контеста prewritten-code и перебивать его с бумажки нельзя.

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

              Конечно принести! Ну не в наглую же с емакса копипастить) это же запрещено! :-)

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

              А что, распечатывать перед контестом полный архив емакса уже не в моде? :)

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

          Ну у нас в команде 2 человека кто сравнительно быстро пишут суф. дерево. Сегодня само дерево мы написали быстро, только набажили в решении самой задачи :-(

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

      А какая сложность? С хешами я придумал лишь за O(MNlogN), что не должно проходить :)

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

        Для суф. дерева сложность O(n + m). Для хешей точно не знаю мы его не писали.

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

    У нас решение за O(n*log(m) + m) с помощью суффиксного автомата. Сконкатенируем все строки из второго набора через какой нибудь разделитель (я использовал '{' == 'z' + 1) и построим на нем суффиксный автомат. Пусть это будет строка t. Теперь несложно для строки s за O(length(s)) искать наибольшую общую подстроку со вторым набором (http://e-maxx.ru/algo/suffix_automata#26 там описано как это делать). После нахождения мы имеем максимальную длину, позицию в нашей строке s, где закончилось вхождение и состояние автомата в этот момент. Для каждого состояния можно предвычислить какое-нибудь его вхождение в строке t (например расстояния до ближайшего терминального состояния). По этим величинам не сложно определять строку и место вхождения в ней. Можно завести массив pref, pref[0] = 0, pref[i] — это сумма длин строк c 1 по i (в 1 индексации) + i (i добавляется за разделители). Теперь имея вхождение в строке t можно бинпоиском по массиву pref определить номер строки. Код: http://www.everfall.com/paste/id.php?95bwdonzu5su

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

      так ведь можно во время считывания постоить два массива t = "it{is{just{text" номера = 1 1 0 2 2 0 3 3 3 3 0 4 4 4 4 позиции = 1 2 0 1 2 0 1 2 3 4 0 1 2 3 4 и решение становиться короче и линейное)

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

      А откуда log(m) берется в решении? Я почти такое же писал, но почему-то думаю, что у меня O(N + M).
      UPD: не дочитал решение до конца.

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

      У нас решение за линию с помощью автомата. Выше уже описано как это сделать.

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

    Как искать наибольшую общую подстроку двух строк разобрано на http://e-maxx.ru. Осталось заметить, что второй набор можно соединить через доллар, а описанный алгоритм за линию обрабатывает каждый символ первого набора.

    Oops, я слоупок.

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

Вот интересно, правильное решение F или нет. Рассмотрим выпуклую оболочку оппозиционеров. Очевидно, что искомая прямая проходит через какую-то вершину. Будем считать прямую "ориентированной" правым образом. Теперь рассмотрим некоторого нашиста вне этого многоугольника. Найдем область многоугольника, видимую нашистом. Границами ее являются две вершины многоугольника. Направления на эти вершины будут минимальным и максимальным углом прямой, для которой этот нашист будет пойман ОМОНом. Осталось решить задачу "дана окружность и куча отрезков с весом на ней. Найдите точку, покрытую суммарным наибольшим весом".

Как искать область видимости. Возьмем любую точку в выпуклом многоугольнике. Отсортируем по полярному углу все точки многоугольника. Теперь есть какой-то нашист. Найдем пересечение прямой, соединяющей точку и нашиста, с многоугольником (бинарным поиском). Очевидно, что обе границы области видимости по разную сторону от этой прямой и могут быть найдены тернарным поиском на максимум угла "точка — нашист — проверяемая точка" в нужной части многоугольника. При равных надо брать, например, точку, которая ближе к нашисту.

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

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

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

Кто-то знает, как делать B без linking-cutting tree?

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

    А как делать В с помощью linking-cutting tree?

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

      Идея похожа на решение простого Dynamic-Connectivity при помощи разделяй и властвуй. Только там мы добавляли ребра в DSU, а затем делали откаты, а здесь будем добавлять ребра в лес linking-cutting tree (LCT). Возможны 2 случая:

      1) Ребро соединяет 2 компоненты связности. Тогда просто соединяем их и ставим в LCT на ребро метку 0.

      2) Ребро соединяет 2 вершины из одной компоненты связности. Тогда увеличим на 1 метки на ребрах на пути между этими двумя вершинами.

      Теперь, если заставить LCT хранить количество нулевых ребер в каждой компоненте, то это и будет равно количеству мостов.

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

        Ой, хромающая теория. Я же не знаю, как обычный Dynamic-Connectivity решать :(

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

          Надо применить разделяй и властвуй по запросам. А именно, разделить запросы на 2 части и рекурсивно посчитать для левой. Теперь, если в левой части есть какие-то запросы на добавление ребер, которые уже не будут удаляться в правой, то добавим их в нашу структуру перманентно. Остальные же запросы на удаление передадим вместе с оставшейся правой половиной запросов в рекурсию для второй части. При выходе из рекурсии откатываем все ребра, которые мы добавили на этом уровне.

          Сколько раз одно и то же ребро могло быть добавлено в структуру одним и тем же запросом? Нетрудно убедиться, что на одном уровне рекурсии один и тот же запрос не будет обработан более чем 2 раза. Отсюда получаем, что сложность работы O(RKlogK), где O(R) — время выполнения одного запроса с нашей структурой.

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

            Понял, а как откатывать DSU?

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

              Ну как, если мы добавили туда ребро, т.е. объединили 2 множества, то при этом было сделано сколько-то изменений памяти. Запишем все эти изменения в стек. Теперь чтобы откатить объединение, достаточно откатить сделанные изменения в обратном порядке, т.е. в таком, в котором они лежат в стеке.

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

                Разве неправда, что если мы не будем откатываться, а просто сохраним DSU во временном массиве, а потом вернем его назад асимптотика не изменится? Казалось бы на каждом уровне рекурсии мы в сумме сделаем O(n) копирований. И откатов кажется в худшем случае будет O(n) на одном уровне рекурсии. Вроде это одно и то же а первое заметно проще.

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

                  Так мы же на уровне k сделаем 2^k копирований, т.е. в сумме квадрат, разве нет?

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

                  Да но уровней вроде логарифм. Поэтому O(n * logn).

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

                  Уровней-то логарифм, но на каждый уровень мы заходим 2^k раз. А так как мы копируем не O(размера уровня), а O(N), то в сумме выходит квадрат.

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

                  Да точно.

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

                  А у меня такой вопрос. Доказательство сложности стандартной DSU использует амортизацию. Вроде как, его здесь нельзя применять.

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

                  Ну так из-за этого здесь DSU работает за O(logN), а не за O(alpha) на операцию.

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

                  Причем, как я понимаю, нельзя не писать ранги, так как без них квадрат?

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

                  Ну в общем да.

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

            Да, и еще. Я правильно понял, что все запросы добавить/удалить одно и то же жадно в пары объединены? Т.е. если вход

            +1
            -1
            +1
            -1
            

            То первое деление пополам во вторую половину ничего не переносит?

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

              Нужно для каждого запроса на добавление найти следующий после него запрос на удаление этого же ребра.

              Да, первое деление во вторую половину ничего не переносит.

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

                Тогда для решаемой задачи возникает примерно такая идея, правда, я в ней ничего пока не понимаю сам %)

                Будем хранить дерево компонент двусвязности. Нам нужно научиться добавлять и сразу удалять ребро, т.е. отвечать на "чистый" запрос с одним добавленным, и добавлять ребро постоянно. Проблема в том, что дерево может быть очень сильно перестроено добавленным ребром. Давайте в начале рекурсии сжимать все вершины, не упомянутые в запросах. Тогда на входе на уровень рекурсии размер дерева — O(количества запросов на отрезке), что суммарно по уровню не превосходит общего количества запросов.

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

                  Похоже на правду.

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

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

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

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

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

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

    1. Оставим в графе ребра которые живы в течении всего блока.
    2. Сожмем компоненты двусвязности, остался лес.
    3. В дереве есть концы ребер, которые меняются в течении блока. Выпишем их все в порядке обхода, а так же lca двух соседних в порядке обхода.
    4. Куски дерева соединяющие выписанные вершины либо целиком мосты либо целиком нет, поэтому их можно сжать.
    5. Осталось ребер и вершин. Тогда операции можно выполнять втупую.
»
12 лет назад, # |
Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

Похоже, что по задача Н все-таки rejudge?

Upd. Кстати, стандартному решению приходилось ставить if на пробный тест. А есть решения, которым это делать не приходилось?

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

    Да. Там не соблюдалось ограничение на угол в тестах. Авторское решение работало настолько хорошо, что ему было пофиг.

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

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

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

        snarknews думает что делать с этим.. По его мнению существенно повлияло это все на результат Petr Team и Akai, насколько я понял. Возможно будут деленные места. Еще он думает над вариантом добавить и это и азов и выкидывать два худших, а не один.

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

          Да, это существенно повлияло на действия всех команд, и по-хорошему должен быть незачетный этап. Но тогда в этом сезоне как-то совсем мало этапов получается. Имхо, вариант "добавить и это и Азов" — вполне приемлемый, правда, я бы предложил в этом случае выкидывать 3 худших, а не 2 (1 + 2 полу-незачетных).

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

            Если добавлять Азов — то нам, пожалуйста, с АС по E)

            А если серьезно, неправильное авторское решение по задаче, которую активно решали участники — это повод сделать раунд безусловно незачетным. И неважно, как изменился монитор, если добавить/убрать АС.

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

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

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

          Это существенно на поведение не менее 14 команд в последние 2-3 часа контеста. Если бы этой задачи не было вообще или если бы по ней были правильные тесты, кто-то бы не отлаживал правильный код, а решал другие задачи. И монитор мог бы быть совсем другим. Это не говоря про такие команды, как мы, кто не стал браться за эту задачу.

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

            Не знаю. Лично я бы не стал ее решать имея достаточно времени на B почти ни при каком мониторе. Те кто отлаживал правильный код это как раз Петя, Akai и Гена. Но Гена и так первый. Ну что многие видя минусы в мониторе взялись за что--то другое это действительно проблема.

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

              Забываешь про нас, мы полтора часа дебагали правильный код ;)

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

                Если вы претендуете решать это задачу, то не надо писать div2.

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

                  В div2 была эта задача)

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

                  Как сказал мне steiner , если мы претендуем писать div1, не надо просыпать контест на 40 минут.

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

                  Кстати, моя универская специализация — обработка изображений ;) Распознать отрезки без шума далеко не самая сложная задача.

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

                  А не подкинете какие-нибудь ссылки на статьи хорошие по этой тематике, распознавание образов и кластеризацию?

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

          Akai переживёт если контест будет рейтинговым....

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

          "_snarknews думает что делать с этим.. По его мнению существенно повлияло это все на результат Petr Team и Akai_".

          На Гену это тоже немножко повлияло. Во всяком случае в результате перетестирования он получил по этой задаче 21 Aссepted. В каком-то смысле личный рекорд :)

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

            Я не против если Гене дадут 101 балл за этап. С первым местом подавать апелляцию на нерейтинговость раунда странно.

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

              Однако дали всего 90. Так что иногда и первое место бывает заинтересовано в нерейтинговости раунда)

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

                Ну, не совсем. Если бы раунд был не рейтинговым, то у нас было бы 400 очков на лучших 5 этапах, а у Гены 310 на лучших 4х — отрыв 90 очков, а сейчас у нас 480 на лучших 6, а у Гены 400 на лучших 5 — отрыв 80.

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

                  А в чем смысл такого сравнения? Вас на N+1 этапе по сравнению с Геной?

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

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

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

                  Про еще один этап я как-то прозевал. Это точно, где-то об этом писали?

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

                  Да, насколько я знаю. Вроде бы 20 или 27 числа

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

                  На сайте пока еще под вопросом стоит. snarknews на чемпе тоже вроде говорил, что может быть будет. Уже все успело измениться?

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

                  Последний раз мне Снарк говорил про "95% что будет"

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

                  В расписании он уже не под вопросом. А есть предположения что это? Я вроде что-то слышал про Варшаву.

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

                  Мне snarknews сказал сразу после Гран-При СПб, что скорее всего будет называться "Гран-При Северной Америки"

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

      Мое решение могло не опираться на это ограничение, но лучше было опираться.

      Можно вместо перепрыгивания на угол PI/8, чтобы избежать повторного нахождения того же отрезка, ввести поиск локальных максимумов на томограмме с последующим выкидыванием отрезков, которые очень сильно похожи на одинаковые (фактически, раствор угла между ними будет порядка 3/длина). Остальные отрезки, как и округление, можно считать практически шумом и просто предварительно смазывать томограмму.

      Upd. Более того, если выводить сертификат, можно вообще отказаться от условия по углу (и умный чекер будет засчитывать неразличимые случаи почти касающихся отрезков), правда, это задача для марафона, ибо точное решение практически нереально.

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

        Ответы были правильными на тест. Не соблюдалось только ограничение по углу.

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

а как можно найти условия прошедших опенкапов?

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

А можно-ли как то по-быстрому найти оригинальные индексы вершин в изменённом многоугольнике в задаче G? Мы писали КМП на двух массивах из элементов (длина стороны, следующий угол) (оба многоугольника так закодированы).

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

    Мы писали хеши для этого. Точнее Dmitry_Egorov писал. Он вообще хеши любит. Я бы тоже кмп писал. Не думаю, что можно что-то принципиально другое. Разве что привести оба к лексикографически минимальному сдвигу, но это явно не проще.

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

      Небольшой оффтоп
      Знавал я человека, который даже КМП/Z-func писал хешами...

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

    Авторские решения тоже с алгоритмами на строках (одно с КМП, другое с хешами).

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

Странно, что еще никто не написал. На opencup.ru объявление по раунду.

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

Восьмой гран-при всё-таки перенесли на 27 число? Не очень удачное пересечение с RCC. А потом еще и на codeforces'e раунд.. Насыщенный день :D

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

    ...а ещё у некоторых на следующий день ЕГЭ по информатике...