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

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

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

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

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

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

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится
Я знал. Я чувствовал. Не поверите, вчера думал что сделают тестовый раунд...и это свершилось!
»
14 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится
будем участвовать!!!
»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Во время раунда зарегистрироваться никак нельзя?
»
14 лет назад, скрыть # |
 
Проголосовать: нравится +9 Проголосовать: не нравится
Как решать вторую задачу?
  • »
    »
    14 лет назад, скрыть # ^ |
    Rev. 4  
    Проголосовать: нравится -11 Проголосовать: не нравится

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

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

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

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

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

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


                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  14 лет назад, скрыть # ^ |
                   
                  Проголосовать: нравится 0 Проголосовать: не нравится
                  Подскажите еще пожалуйтса, почему наша функция бинарна? Допустим есть отрицательный цикл длиной k. Почему из этого следует, что есть отрицательный цикл длиной k+1, почему мы можем использовать бинарный поиск?
                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  14 лет назад, скрыть # ^ |
                   
                  Проголосовать: нравится +5 Проголосовать: не нравится
                  Во, я тоже долго думал :) Потому что мы можем из вершины саму в себя перейти, т.к. d[i][i] = 0, а цикл у нас не обязательно простой должен быть.
                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  14 лет назад, скрыть # ^ |
                   
                  Проголосовать: нравится +5 Проголосовать: не нравится
                  Видимо я наврал и везде путь длины k следует заменить на путь длины не более k. Тогда все очевидно.
          • »
            »
            »
            »
            »
            »
            14 лет назад, скрыть # ^ |
             
            Проголосовать: нравится 0 Проголосовать: не нравится
            oversolver, объясните, пожалуйста, и вы свое решение.
            • »
              »
              »
              »
              »
              »
              »
              14 лет назад, скрыть # ^ |
              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 рёбер. Собственно потом смотрим на главную диагональ - если есть хоть одно положительное число, то и бесконечный цикл найдётся, исходя из этого меняем границы бинпоиска.

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

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

FAIL the first and the last character must be letter

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

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

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

»
14 лет назад, скрыть # |
 
Проголосовать: нравится +8 Проголосовать: не нравится
Вроде ничего не упало за контест. Можно уже сказать Codeforces: 4й тест пройден? :)
»
14 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится +20 Проголосовать: не нравится

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

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

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

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

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

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

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

  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +11 Проголосовать: не нравится
    Боюсь с этим пока ничего не сделаем. Дело в том, что очень многие вещи в процессе контеста кэшируются. Здесь срабатывает один из кэшей, но он очень короткоживущий. Думаю, что такое случается крайне редко и F5 помогает. Этот issue записан, придумаем как пофиксить как придет время.
»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Один вопрос: завтра див1 и див2 будут разделены по разным комнатам, или будет как сегодня? Все-таки див2 серьезно прикормили очками тех, кто в див1.
  • »
    »
    14 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Ну все в равных условиях. А вот если наоборот сделать, то у тех кто по каким-то причинам оказался в див-2(например новый человек или читер) будет  большое преимущество.
  • »
    »
    14 лет назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится +7 Проголосовать: не нравится
    Будет именно так. Хочется поставить участников в равные условия. С другой стороны участникам Div.2 будет проще, так как больше вероятность, что неправильное решение взломают.
»
14 лет назад, скрыть # |
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.  
»
14 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится
What's the idea behind problem B? 
»
14 лет назад, скрыть # |
 
Проголосовать: нравится -15 Проголосовать: не нравится
Не знаю, известный это баг или нет: в начале раунда вылезло сообщение-вопрос "Соревнование началось. Хотите перейти в интерфейс участника?" с одной кнопкой OK.
»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
А почему при решении задач с архива или даже сейчас, при дорешивании этого раунда, время сдачи отображается всегда постоянным числом: "596523:14"?
»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Ещё один вопрос. Почему время в таблице результатов под успешными посылками  посланными в дорешивание какое-то большое?
»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

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