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

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

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

У кого-нибудь были проблемы с 8ым тестом в H? У нас какая-то мистика — WA8, но если мы добавляем чекер в наше решение, он падает на 4ом тесте. Неужели у жюри слабый чекер? ну или у нас руки совсем кривые

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

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

Прошлый раунд Снарк просил пока не обсуждать. Может быть, с этим так же?

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

    Ну тогда про это стоило написать. Давайте тогда не писать здесь ничего по задачи, пока не будет комментариев snarknews.

    Upd.

    Снарк говорит, что можно обсуждать.

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

Как решать E?

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

    Пусть есть матрица с единицами. Возьмём главую диагональ, и умножим все её клетки на какое-то простое число. Сдвинем по циклу, умножим ещё раз, и так N раз.

    2  3  5  7 11
    11 2  3  5  7 
    7 11  2  3  5
    5  7 11  2  3
    3  5  7 11  2
    

    Если N нечетное то можно сделать такой же квадрат для побочной диагонали но с другими простыми числами.

    13 17 19 23 29
    17 19 23 29 13
    19 23 29 13 17
    23 29 13 17 19
    29 13 17 19 23
    

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

    Для чётных N так не выйдет, поэтому в первом квадрате я сдвигал нижнюю половину матрицы:

    i<n/2 : j=i
    i>=n/2 : j = n/2 + (i-n/2+1)%(n/2)
    2   3  5  7 11 13
    13  2  3  5  7 11
    11 13  2  3  5  7
    5  7  11 13  2  3
    3  5  7  11 13  2
    7  11 13  2  3  5
    

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

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

Как решать L and N див2. Не обессудьте)

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

    L:

    Положим в мапу все цифры со значением 1. Потом (n - 1) раз сделаем следующее: вынем каждое число из мапы, умножим на каждую цифру и положим обратно. Потом пройдёмся по всем значениям в мапе, возведём в квадрат и прибавим к ответу.

    Код

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

      А как пояснить что число различных произведений растет медленно или может это число можно формулой выразить?

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

        Всего у нас миллиард различных чисел. Причём, перестановка цифр в числе не даёт нового произведения.

        Очень-очень грубо получается что-то вроде: .

        Но пока я не написал код, для меня это было неочевидно. Даже когда Lo_R_D предложил написать это в начале раунда, я убедил его что это порядка 109 операций.

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

    N:

    Вроде такое должно работать:

    Пройдёмся массиву от B влево и будем поддерживать разность (количество чисел меньше B — количество чисел больше B). Затем пройдёмся от B вправо поддерживая ту же разность. На каждом элементе прибавим к ответу количество раз, которое текущая разность с противоположным знаком встретилась пока проходились влево.

    UPDATE: Наконец таки появилась дорешка. Это решение зашло. Код.

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

В задаче D нет решения только когда все буквы одинаковые, или когда все разные, верно ли это?

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

    Решения нет только в случае всех одинаковых букв.

    UPD. Иначе возьмём обычную цепочку и двумя разными способами заменим одно ребро на цикл (например, для cтроки aabb автоматы будут aa*bb и aabb*).

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

      А можно тогда пример для abcd, если не трудно?

      Upd: ясно, спасибо.

      • »
        »
        »
        »
        9 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится +8 Проголосовать: не нравится
        1 -> 2, a
        2 -> 2, b
        2 -> 3, c
        3 -> 4, d
        4 - терминальная, в 5 приходит огромное число рёбер 
        
        1 -> 2, a
        2 -> 3, b
        3 -> 3, c
        3 -> 4, d
        4 - терминальная, в 5 приходит огромное число рёбер 
        

        Очевидно, автоматы ab*cd и abc*d.

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

У нас тоже что-то неясное в H, но мы по ходу переполняем long long. Может вы тоже?

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

    У нас biginteger, так что вряд ли.

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

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

      UPD. Написал внутри решения жадность по выбору строки и столбца и зашло

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

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

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

А как решать А и J? Мы без монитора решали и почему-то по этим двум не было разумных идей. Сейчас смотрю на standings и кажется, что мы что-то упустили.

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

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

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

      Да, вроде понятно. Спасибо! Вопрос по J еще открыт :)

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

        Мы J не сдали, но есть следующая идея — не знаю верная или нет:

        Что такое ответ для точки (x, y)? Это минимум из максимальных расстояний(под расстоянием понимается количество поворотов) для следующих случаев:

        1. вначале мы движемся по строке x(горизонтально)
        2. вначале мы движемся по столбцу y(вертикально)

        Как найти необходимое количество поворотов, чтобы посетить все точки, если вначале двигаемся по строке x? Заметим, что за один ход мы можем дойти до любой точки, принадлежащей столбцам на отрезке [left[x], right[x]]. На следующем ходу можно дойти до любых точек строк из отрезка [up, down], где up и down — минимальный и максимальный номера среди строк, инцидентных текущим столбцам. Повторяем, чередуя строки и столбцы, до тех пор пока не окажется, что мы не посетили все столбцы или все строки. Количество итераций и будет ответом для строки x. Осталось обновить ответ для всех ячеек, принадлежащих строке x. Для поиска минимальной и максимальной инцидентной строки/столбца на отрезке можно выполнить предподсчёт.

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

          Да похоже на правду.. Спасибо! Только там вроде максимум из минимальных расстояний.

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

У нас в дорешивании зашел код с чекером. Можешь показать ваш код?

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

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

    Наш код: http://ideone.com/KzB2UD

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

How about the rest of the set? B/C/H/I? Also I was wondering if different teams have different solution to F?

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

    B:

    The task is obviously redused to the following: we have some string S, how many ways to add x characters to it and get borderless word?

    Let's calculate the same thing for not borderless words and then subtract it from 2x.

    To do it one can iterate over L — the minimal length of such suffix that corresponds prefix. Now we need to know that there will be no such suffix with less length -- it's exactly our initial task with less x.

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

Can't find problems of Northern GP in Upsolving (div.2).

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

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