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

UPD: ABBYY Cup 2.0 завершился! Свежая информация!

UPD: Публикуем разбор :)

И снова привет!

Напоминаем, что сегодня в 16 часов состоится долгожданный сложный дивизион ABBYY Cup 2.0!

Задачи будут сложными для полного решения, рассчитанные на ребят из Див1 Codeforces. Для участия не забудьте зарегистрироваться на контест!

Правила не изменились: в течение 5 часов участники должны будут решить 6 задач (одна из них эвристическая). Тесты разбиты на три группы (легкая, средняя, сложная) стоимостью в 20, 30 и 50 баллов соответственно. Засчитывается только полное прохождение группы тестов. При равенстве баллов штрафное время учитывается по правилам ACM. Полное решение какой-либо группы тестов засчитывается за сданную ACM-задачу, и в соответствии с этим вы будете получать штрафное время. Контест будет рейтинговым для всех независимо от формы участия и рейтинга.

Всех участников мы ждем на Дне открытых дверей ABBYY, где расскажем о наших технологиях и вручим подарки. Лучшим поможем с организацией поездки, а также подарим ценные гаджеты.

Надеемся, решение задач принесет вам интеллектуальное удовольствие!

Удачи, и пусть победит сильнейший : )

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

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

are the problems ordered by the increasing complexity ???

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

Когда будут подробности об "эвристической" задаче?

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

За неудачные попытки дается штрафное время?

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

    Видимо, ровно так же, как и в ABBYY Cup 2.0 - Easy, то есть да, по 20 минут.

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

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

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

It will be good that for each contest there will be a small info table in the post which will answer all standard questions about the contest, like "for whom it will be rated", "problems are ordered by difficulty or not", "score distribution mechanism", etc, so that people wouldn't ask same questions again and again in comments. Sometimes that information is specified in the text in different places, so gathering them all into one table will make it more easier to see all needed info at once.

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

A little sad that I'm gonna miss the last COCI round for this event :(

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

will it be rated for div 2 or not?

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

а почему на главной странице до контеста 5 часов, а на странице соревнований 30 минут?

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

    Регистрироваться можно в любое время т.к. нет разделения на комнаты.

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

    Вы путаете время до окончания регистрации и начала контеста.

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

will the registeration be opened in the contest time?

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

Who can stop Perlik?? He submitted D2, 25 times & D3, 54 times now and it is increased.

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

T_T..forget to register and become unoffical...

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

18 задач — аж глаза разбегаются...

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

Если не противоречит правилам, поясните пожалуйста, как во втором примере задачи A получается 40 ходов? Если противоречит, я подожду окончания соревнования.

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

    Все вопросы по задачам лучше задавать через интерфейс раздела "соревнования"

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

      Спасибо, что помогли разобраться с интерфейсом. Однако, во время соревнования я получил ответ, что то типа "без комментариев".

      Прочитал разбор, с таким решением всё понятно, но ведь в условии сказано, или как минимум я так понял, что нужно в каждом конкретном случае k фиксировать и уж потом складывать.

      Что я не правильно понял?

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

Эвристическая задача клевая.

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

Как решать B3? :(

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

    Строим граф компонент реберной двусвязности. Это дерево, строим на нем LCA. Тогда если две вершины в разных компонентах, то ответ — расстояние в этом дереве

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

    Например, можно строить конденсацию графа по рёберной двусвязности (рёбра в новом графе = мосты в старом), затем искать расстояния через LCA, так как конденсация — дерево.

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

      Но каак все так быстро это писали?

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

        С помощью e-maxx, вероятней всего.

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

        15-20 минут, не так мало что-бы такое написать.

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

        Парочка дфсов, что туда еще прилепишь?:)

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

        Я так и сделал. 23 минуты

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

          С красными-то понятно) Но я видел пару фиолетовых, сдавших очень быстро, и долго-долго пытался придумать простое решение.

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

            Ну это, по-моему, довольно простое решение

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

        Там, несмотря на всю громоздкость, пишется всё практически не думая.

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

          Если пишешь LCA впервые в жизни, приходится подумать)

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

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

  • »
    »
    13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    1. Удалим все мосты из графа
    2. Оставшиеся компоненты связности сожмём в 1 вершину
    3. Добавим мосты обратно
    4. Получилось дерево
    5. Ответ — расстояние между соответствующими вершинами в дереве
    6. Найдём наименьшего общего предка 2 — х вершин (a и b) из запроса
    7. Предпросчитаем глубины вершин в дереве
    8. Ответ = depth[a] + depth[b] — 2 * depth[lca(a,b)].
»
13 лет назад, # |
  Проголосовать: нравится +6 Проголосовать: не нравится

Понравились все задачи, кроме Д! Что туда нужно было пихать, что-бы зашел перебор?

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

    Я делал так: Сгенерил все "хорошие" маски — те наборы чисел, к которым можно что-нибудь добавить, чтобы собралось n с правильной суммой. Ну а потом просто перебирал, какое число очередным поставить, отсекаясь, если в какой-то строке, столбце или по диагонали маска получается "нехорошая". Получил TL. Добавил random_shuffle. Прошло :-)

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

      у меня шаффл на D3 доходил до 33-го теста максимум. Это за 8 попыток.

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

    Перебор с доказанной асимптотикой.

    У меня так: будем заполнять квадрат в таком порядке (элементы со * не надо перебирать, они определяются однозначно:

    1 2 3 4*

    5 8 9 10*

    6 11 13 14*

    7* 12* 15* 16*

    Трудоемкость не больше 16*15*14*12*11*9*8*6*4. Наверно еще много само отсекается, когда нечего поставить.

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

      Кажется так будет даже лучше:

      1 2 3 4*

      5 6 7 8*

      12* 9 10 13*

      11* 14* 15* 16*

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

        Точно.

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

        1##2
        x34x
        x5xx
        x##x

        где x — то, что ставим, цифры — что однозначно определяется, # — то что остается

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

        будет ли лучше такое?

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

А сколько народу проходит дальше?

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

Блин одной секунды не хватило что сдать F3. Послал в дорешивание прошло

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

Что-то не могу понять почему в задаче F не канает отсортировать строки, посчитать Lcp для соседних просто влоб, а потом имеет смысл перебирать только k смежных строк? Ведь тот же принцип что и в суффиксном массиве — наибольшей общий префикс двух строк будет равняться минимуму Lcp соседних строк в отсортированном массиве, которые лежат между нашими двумя.

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

    5 4

    aaaaaaaaaaaaaaaa

    aaaaaaaaaaaaaaaa

    b

    cccccccccccccccc

    cccccccccccccccc

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

      Тьфу блин, каким местом думал... Спасибо)

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

    Потому что например может быть такой тест a (100 раз) b (1 раз) c (100 раз). k=200. Очевидно, что надо взять 100 строк "a" и 100 строк "c"

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

    Смежных?

    5 4 aab aac bbb cca ccb

    В F1 и F2 прошёл бор с динамикой, F3 хз как делать.

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

Very enjoyable competition, I do not regret missing out on COCI for this :D

I particularly enjoyed solving task E (E1 and E2 at that, I had no idea how to cope with the "noise" — but still, it was a very interesting task) :)

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

    rng_58's 1637186 is very easy to read :)

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

    We can apply a (say 5 x 5) "median filter" which can handle this kind of salt and pepper noise. Provided that the shapes are far enough from each other, there is only a small chance that some of them merge after filtering the image.

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

Как решать задачу C3? У меня никак не пропихивался nlogn.

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

    Я запихнул n * sqrt(n) :)

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

    У меня N*Log^2 прошел :)

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

      Ну вы аццкие пихальщики, у меня NLogN с горем пополам за 980 мс.

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

      Расскажите, как пихать NLog^2, как пихать n * sqrt(n), и кто придумал самое простое решение. А то у меня ужас в миллион строк.

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

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

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

        У меня сравнительно короткое решение.

        Я держал для каждой группы независимых позиций в таблице (т.е. для групп вида 0+m*i, 1+m*i,...,gcd(h,m)-1+m*i) раздвоенный сет пустых мест (т.е., если свободно p, то свободно и p+size, и наоборот). Далее просто upper_bound для нахождения первого подходящего места. Ну и немного шаманства с map и прекальком индексов. 1640742

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

        Если бы стлевский сет умел возвращать номер элемента в множестве то решение было бы в один цикл. Поскольку оно это не умеет то можно: 1) декартово дерево — тут все понятно как; 2) сделать как написано выше с фенвиком и бинпоиском; 3) сделать обычное дерево отрезков для суммы с хитрой операцией lower_bound которая каждый раз смотрит в левое поддерево берет там сумму начиная с элемента pos если не ноль идет в него иначе идет в правое. асимптотика n * log^2 n

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

          эээ... зачем это все?

          задача очень просто решается стандартным сетом в пару строчек

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

            Воот, это-то я и искал, спасибо)

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

            А как ты узнавал количество элементов которые ты перепрыгнул?

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

              Там можно в сет хранить индексы свободных мест и при помощи lower_bound доставать ближайшее свободное. Вполне себе N log N. =)

              UPD: Забыл сказать, что вначале все циклы надо перенумеровать внутри, чтобы стал порядок от 0, до h / gcd — 1.

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

                Да я что-то не подумал перенумеровать. Так намного проще

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

                Вот здесь напоролся на то, что lower_bound(myset.begin(),myset.end(),x) — совсем не то же самое, что myset.lower_bound(x).

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

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

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

                  В том-то и проблема, что скомпилируется, но работать будет не за O(logN), а за O(N).

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

                  Скомпилируется. И даже будет работать :)

                  Правда, из-за того, что итераторы не произвольного доступа, работать будет за линию, а не log.

                  Функции из algorithm на разные виды итераторов перегружены.

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

              все перенумеровал, тогда искомое — это разность в индексах куда хотели встать и куда встали в итоге

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

    Мой NlogN работает 580 мск.

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

    Тысяча чертей. У меня nlog^2(n) доходил до 40 теста, а nlogn до 31го или 36го.

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

    В данной задаче имеет значение, как осуществляется ввод: через scanf() или через std::cin. С использованием std::cin ловил TL, а через scanf прошло. При "200000 M 200000" разница выполнения на одном из тестов достигала 500 мс (1684547 и 1684581). Никогда на практике не использую scanf из-за его проблемности, но здесь такой случай, когда без него трудно справиться))

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

Конкурс на самый идиотский порядок сдачи. Подаю свою кандидатуру с:

А1-А2-А3-D1-B1-B2-E1-C1-F1-B3-E2-C2-C3...

Да, спасибо авторам, задачи, конечно, хорошие... Но слово Hard обломало мне весь контест.

Думал, что будут реально трудные задачи, и тактика "codejam" сработает. В результате, потратил кучу времени на написание лишних решений, да и в тех, которые "не лишние", немного намудрил.

И место черт знает где:)

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

I enjoyed the competition very much. I think we should have more of these 5 hour contests in which the solutions are judged during the contest time (i.e. ACM style rules).

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

The Magic Square is so interesting。I solve it for a long time。

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

"Тесты разбиты на три группы (легкая, средняя, сложная) стоимостью в 20, 30 и 50 баллов соответственно." А в тексте задач, другое количество баллов. Почему, это просто что-то правилось и забыли везде поправить, или для разных участников ...?

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

    Получение 20 баллов — прохождение набора стоимость 20 баллов.

    Получение 50 баллов — прохождение набора стоимость 20 баллов и набора стоимостью 30 баллов.

    Получение 100 баллов — прохождение первых двух наборов, а так же набора стоимостью 50 баллов.

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

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

а когда будет пост про финал ABBYY Cup?

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

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