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

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

3-го января в 19:00 (московское время) состоится очередной Codeforces Testing Round #4. Конечно, результаты на этом раунде не повлияют на ваш рейтинг, а его проведение — это тест системы перед ответственным Codeforces Round #100. Раунд продлится всего час и будет содержать две задачи. Я не обещаю что-то интересное и захватывающее, но как небольшая разминка будет самое то :) Для нас же важно ваше участие, чтобы быть спокойными относительно недавних изменений.

Буду рад видеть вас на тестировании,
MikeMirzayanov

Тестирование благополучно завершено. Неполадок не выявлено. Всем большое спасибо за участие! Надеюсь вам понравился этот спринт.

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

»
12 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
Я знал. Я чувствовал. Не поверите, вчера думал что сделают тестовый раунд...и это свершилось!
  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +9 Проголосовать: не нравится
    Это хорошо, но не надо рекламировать свои пингвиньи способности :)
    • »
      »
      »
      12 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится -6 Проголосовать: не нравится

      как это не надо! реклама-двигатель торговли!

      кстати, задачи на раунде будут какой степени сложности? на реализацию?

      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится +5 Проголосовать: не нравится
        А может лучше завтра на раунде и узнаем?
        • »
          »
          »
          »
          »
          12 лет назад, # ^ |
            Проголосовать: нравится -8 Проголосовать: не нравится
          ну просто тестинг раунд, тем более нерейтинговый
          • »
            »
            »
            »
            »
            »
            12 лет назад, # ^ |
              Проголосовать: нравится +1 Проголосовать: не нравится
            А может и условия заранее опубликовать? Совсем уже зажрались :)
      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится +15 Проголосовать: не нравится
        Спросите у tuchak, он подумает .. и свершится
»
12 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится
будем участвовать!!!
»
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Во время раунда зарегистрироваться никак нельзя?
  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    нет, потому что уже сделано распределение по комнатам
    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +3 Проголосовать: не нравится
      Вроде в каком-то из раундов была такая возможность. Хотя возможно я путаю мечты с реальностью :)
      • »
        »
        »
        »
        12 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится +12 Проголосовать: не нравится

        В раундах по системе АСМ можно, так как там нет комнат. Такие раунды были, например, командная олимпиада школьников.

»
12 лет назад, # |
  Проголосовать: нравится +9 Проголосовать: не нравится
Как решать вторую задачу?
  • »
    »
    12 лет назад, # ^ |
    Rev. 4   Проголосовать: нравится -11 Проголосовать: не нравится

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

    UPD: dfs из всех вершин, вроде O(N*M)

    UPD2: А написал я вообще полную лажу %) Это талант: придумать одно, написать другое, при этом правильное (касательно ответа), но асимптотически медленное %)

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      А зачем проверка на то более счастливы мы или нет? Ведь просто, если мы счастливы > 0, то мы берем мин.длину цикла.

      Или я не так поняла?
      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Например у нас был путь вида 1 -> 2 -> 3 -> 2, 
        при этом С12 = 100, С23 = -1, С32 = -1;
      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        мы можем прийти в какую то вершину несколькими способами, и дфс может выбрать такой, который вообще несчастливый

        тест что то типа

        4 4

        1 2 10 -100

        2 4  -100 10

        2 3 10 -100

        4 3 -100 10

        3 1 10 -100

        мы можем пойти по 1 2 4 3 1 - он несчастливый, в то время как 1 2 3 1 счастлив

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Тут я тест сходу строить не умею, но по-моему это тоже неверно, по той же причине.
    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +7 Проголосовать: не нравится
      Что-то мне кажется дфс это лажа.
  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +20 Проголосовать: не нравится
    Я умею за N^3logN. Несложно посчитать кратчайший путь между всеми парами вершин с длинами степенями двойки, а дальше сделать что-то бинпоископодобное. Ничего другого лучше N^2M не знаю.

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      А ты писал Н*Н*М + читы с худшими случаями?
    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      А можно тогда просто бинпоиск по максимальной длине цикла?
      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится +3 Проголосовать: не нравится
        Может и можно, но я сходу не понимаю как считать быстро пути данной длины между всеми парами вершин.
        • »
          »
          »
          »
          »
          12 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          считать возведением матрицы в степень, n3log2n прошло
          • »
            »
            »
            »
            »
            »
            12 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            А мое решение это не тоже самое просто реализованное за N3logn?
            • »
              »
              »
              »
              »
              »
              »
              12 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              Можете поподробнее рассказать про свое решение? =)
              • »
                »
                »
                »
                »
                »
                »
                »
                12 лет назад, # ^ |
                  Проголосовать: нравится +14 Проголосовать: не нравится
                Решение за четвертую степень:
                d[len][i][j] - кратчайший путь длины len из i в j.
                Очевидно что ответ - минимальное len при котором есть i такое что d[len][i][i] < 0.
                Как ее считать очевидно.

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


                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  12 лет назад, # ^ |
                    Проголосовать: нравится 0 Проголосовать: не нравится
                  Подскажите еще пожалуйтса, почему наша функция бинарна? Допустим есть отрицательный цикл длиной k. Почему из этого следует, что есть отрицательный цикл длиной k+1, почему мы можем использовать бинарный поиск?
                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  12 лет назад, # ^ |
                    Проголосовать: нравится +5 Проголосовать: не нравится
                  Во, я тоже долго думал :) Потому что мы можем из вершины саму в себя перейти, т.к. d[i][i] = 0, а цикл у нас не обязательно простой должен быть.
                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  12 лет назад, # ^ |
                    Проголосовать: нравится +5 Проголосовать: не нравится
                  Видимо я наврал и везде путь длины k следует заменить на путь длины не более k. Тогда все очевидно.
          • »
            »
            »
            »
            »
            »
            12 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            oversolver, объясните, пожалуйста, и вы свое решение.
            • »
              »
              »
              »
              »
              »
              »
              12 лет назад, # ^ |
              Rev. 2   Проголосовать: нравится +5 Проголосовать: не нравится

              бинпоиск по ответу, пусть длина цикла - k, возведём нашу матрицу смежности g (если ребра нет, то g[i][j] = -inf) в эту степень. Умножение конечно здесь другое: a*b[i][j] = max{k=1..n | a[i][k]+b[k][j]}. Эта штука ассоциативна, поэтому можно возводить в степень бинарно. По сути это будет то, о чём выше говорилось - динамика, где g^k[i][j] - максимальный путь из i в j за ровно k рёбер. Собственно потом смотрим на главную диагональ - если есть хоть одно положительное число, то и бесконечный цикл найдётся, исходя из этого меняем границы бинпоиска.

              • »
                »
                »
                »
                »
                »
                »
                »
                12 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                Уух, прямо на грани проходит, и только на гцц.
              • »
                »
                »
                »
                »
                »
                »
                »
                12 лет назад, # ^ |
                Rev. 2   Проголосовать: нравится +3 Проголосовать: не нравится
                Мне кажется вы в g^k[i][j] хранили длину максимального пути из i в  j за не более чем k ребер.
                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  12 лет назад, # ^ |
                  Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

                  Если g[i][i] == 0, неважно, ровно k или не более k.

                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  12 лет назад, # ^ |
                    Проголосовать: нравится +3 Проголосовать: не нравится
                  Ну вот именно если g[i][i]=0, это означает что мы находим пути длиной не более k. Важно же знать именно что мы находим.
                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  12 лет назад, # ^ |
                    Проголосовать: нравится 0 Проголосовать: не нравится
                  Ну да, верно.
  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Я написал DFS для поиска простых циклов, перебрал все найденные, но некорректно реализовал проверку "линейных циклов" - мы ходим по линии туда-сюда (я забыл, что эта линия может не доходить до корня дерева поиска в глубину).
    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +6 Проголосовать: не нравится
      dfs не находит все циклы. Он находит хотя бы один. Хотя бы потому что циклов экспоненциальное число. И несложно построить тест где все циклы самый короткий цикл дфс не найдет. Аналогично строится самый короткий отрицательный.
  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    я писал дп, оно упадет по ТЛЕ :)
    dp[first,last,length] , начало цикла, где мы сейчас и длина которую прошли.
»
12 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

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

FAIL the first and the last character must be letter

это где то написано в условии?? 

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Да, написано. Последнее предложение условия
  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится
    Гарантируется, что между двумя знаками препинания содержится хотя бы одно слово. Текст начинается и заканчивается латинской буквой.
  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Да, но не в формате входных данных
    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится -9 Проголосовать: не нравится
      А ведь Вы по большому счёту Вы очень и очень правы, ибо это предложение в условии можно расценить как требование к формату выходных данных...
      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Оно им и является, на самом деле. Я его не прочитал, и делал тримы в коде, потом после некорректного взлома понял, что это описано в условии.
  • »
    »
    12 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    // уже ответили

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

У меня в уведомлении о взломе(таблица "Вопросы по задачам") в графе рассылка стоит "Да". Это баг или фича?

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится
    Видимо надо убрать. В некотором роде это индивидуальная рассылка (поэтому Да и появилось) :)
  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +8 Проголосовать: не нравится
    Это древний баг.
»
12 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится
Вроде ничего не упало за контест. Можно уже сказать Codeforces: 4й тест пройден? :)
  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +12 Проголосовать: не нравится
    Да, каких-либо неполадок не замечено. Спасибо за участие.
»
12 лет назад, # |
Rev. 2   Проголосовать: нравится +20 Проголосовать: не нравится

История задачи А участника Goblin:

00:19:01 Полное решение [претесты] → 996164

00:38:59 Решение взломано участником SkyHawk

00:39:03 Неудачная попытка взлома участником CleRIC

это как так?)) Мне за это еще и минус дали. 

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

Небольшой баг: при второй отправке решения на задачу А пришлось обновлять страницу, чтобы оно появилось в списке.

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +11 Проголосовать: не нравится
    Боюсь с этим пока ничего не сделаем. Дело в том, что очень многие вещи в процессе контеста кэшируются. Здесь срабатывает один из кэшей, но он очень короткоживущий. Думаю, что такое случается крайне редко и F5 помогает. Этот issue записан, придумаем как пофиксить как придет время.
»
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Один вопрос: завтра див1 и див2 будут разделены по разным комнатам, или будет как сегодня? Все-таки див2 серьезно прикормили очками тех, кто в див1.
  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Ну все в равных условиях. А вот если наоборот сделать, то у тех кто по каким-то причинам оказался в див-2(например новый человек или читер) будет  большое преимущество.
  • »
    »
    12 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +7 Проголосовать: не нравится
    Будет именно так. Хочется поставить участников в равные условия. С другой стороны участникам Div.2 будет проще, так как больше вероятность, что неправильное решение взломают.
    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      С третьей стороны нам (див1) придется блокировать свои решения как можно раньше и ломать див2 - кто успел, тот и съел.
»
12 лет назад, # |
Rev. 2   Проголосовать: нравится +7 Проголосовать: не нравится
I have one point in the testing round. At min 32 after i submitted B problem , I didn't get an response from the system for like a min. then all the sudden the system said pretests passed.  
»
12 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится
What's the idea behind problem B? 
  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится
    anyone ?
    how to do problem B ?
    • »
      »
      »
      12 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится +5 Проголосовать: не нравится

      Try googletranslate russian version.

      binpoisk == binary search, lol

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

      After running the DP version of Floyd-Warshall (similar to exponentiation by squaring), you can check if a positive cycle of length K exists in O(N^3.logN) time by combining matrices for maximum distances <=2^U.

      Knowing this, running a binary search from 2..N for the cycle length can also run in O(N^3.logN) time if the operations are ordered correctly.

»
12 лет назад, # |
  Проголосовать: нравится -15 Проголосовать: не нравится
Не знаю, известный это баг или нет: в начале раунда вылезло сообщение-вопрос "Соревнование началось. Хотите перейти в интерфейс участника?" с одной кнопкой OK.
  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
    Не правда, там еще есть кнопка закрыть, которая крестик в правом верхнем углу.
    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится -11 Проголосовать: не нравится
      Я в курсе. Вот только кнопки "Да/Нет" в данном случае будут более корректны.
      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится +4 Проголосовать: не нравится
        А если участник в ужасном стрессе спешит читать задачи, и вдруг нечаянно нажимает «Нет»?
        • »
          »
          »
          »
          »
          12 лет назад, # ^ |
            Проголосовать: нравится -10 Проголосовать: не нравится
          Все правильно. Если от так волнуется - контест противопоказан. Вообще, к чему сарказм? Если вы баг не наблюдали - так и скажите, а не умничайте.
          • »
            »
            »
            »
            »
            »
            12 лет назад, # ^ |
              Проголосовать: нравится +23 Проголосовать: не нравится
            да не баг это, нафиг даже фиксить, имхо, не нужно
            • »
              »
              »
              »
              »
              »
              »
              12 лет назад, # ^ |
                Проголосовать: нравится +4 Проголосовать: не нравится
              Ну вообще очень тупо выглядит.
              Я когда в первый раз увидел, очень долго смеялся.
              Ответа "не писать контест не существует"))
»
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
А почему при решении задач с архива или даже сейчас, при дорешивании этого раунда, время сдачи отображается всегда постоянным числом: "596523:14"?
  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +4 Проголосовать: не нравится
    и почему нельзя посмотреть код тех, кто сдал на дорешивании?
»
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Ещё один вопрос. Почему время в таблице результатов под успешными посылками  посланными в дорешивание какое-то большое?
»
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

I got stuck in problem B just now, but after read the article I figure out it :)