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

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

Good news everyone!

Так как предыдущая тема съехала из прямого эфира придется заводить новую

Сегодня в 19:10 по Москве состоится очередной СРМ

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

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

Так как предыдущая тема съехала из прямого эфира придется заводить новую

Но ведь можно было просто поднять старую.

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

    Её заминусовали полностью и теперь сложно поднять...

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

    Она, я так понял, набрала отрицательный рейтинг, потому в прямом эфире и не отображается

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

Правда, что в медиуме достаточно было предпосчитать вектора вида (x,y) 0<x<=L, 0<y<=H, gcd(x,y)=1, а потом для каждой стартовой вершины перебрать?

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

    Врядли. Их порядка (HL)/2 казалось бы.

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

    Ну, я не так делал — я фиксировал вектор до последней взятой точки

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

    Да, потому что получится асимптотика не N^3, а N^2 log N, так как вылезет какая-то сумма по всем n (1 + 1/2 + 1/3 + ... + 1/n).

    UPD: А, стоп. Конечно не перебрать из каждой стартовой вершины. Для фиксированного вектора (x, y) мы умеем за O(min(L / x, H / y)) рассовывать из него всё, на что он влияет. И тогда получится N^2 log N

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

      Вроде бы даже N^2, потому что сумма обратных квадратов.

      Но для каждой перебираемой пары придется считать gcd, то есть все-таки N^2 log N.

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

        Ну не квадратов всё-таки. Сумма по .

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

          Ах да, я просто считал количество прямых с не меньше, чем k точек на них, и для k есть (N/k) вариантов по dx и (N/k) вариантов по dy, а количество хороших стартовых позиций легко по k и dx вычисляется.

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

      Че? тут получается . Она казалось бы большая иногда. То что ты написал получится видимо, если перебрать минимум, а потом перебирать непонятно что.

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

        Не-а. Если вектор (x, y) со взаимно простыми координатами, то он принципиально бывает интересен в d = 1 + min(L / x, H / y) состояниях: когда на нём 1 точка, 2, ... d. Для каждого состояния мы положениям вектора на отрезке оно соответствует и прибавляем к коэффициенту при нужном биномиальном коэффициенте. Получается O(d) на вектор.

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

      А почему O(L / x + H / y) а не O(L / x)? Вроде как более сильная оценка неверна только если x = 0 и положить L / x = ∞ =)

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

        Ну, в выражении выше я на автомате шлёпнул O(L / x + H / y), хотя там более корректно O(min(L / x, H / y)), сейчас поправлю.

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

          Нет, я не об этом. По мне, так второе слагаемое/аргумент функции min можно опустить, если не брать в расчет случай x = 0.

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

            А, в смысле, так тоже выйдет правильная оценка? Ну да, а так сразу видно, почему оно летает — во-первых, из минимума возьмётся коэффициент 1/4, из того, что вектора со взаимно простыми координатами — ещё 6 / π2...

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

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

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

    бред

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

Авторы молодцы, замечательные условия! Всегда бы так.

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

    Очень приятно, не часто можно увидеть такие отзывы:D

    P.S. Особенно, от того, кто залажал.

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

      Красота а не контест! Может попробуем ввести традицию, что анонсирует SRM его автор, если он есть на CF? Так будет честно по меньшей мере с точки зрения вклада.

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

        Есть такая традиция, что автора до конца контеста не оглашают.

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

          Правда? Я не знал. Ну тогда надо по меньшей мере отписываться в анонсе.

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

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

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

      Чего?.. Разное в смысле иногда бывает пустая строка?

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

        Всмысле иногда n=3 и просят длинную строку длины 3. А дали строку длины 1

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

          Аааа!!! Что за треш? Я так и не заметил этого... Теперь лотерея — будет ли моё решение работать или нет :-\

          UPD: Фак ееее, прошло. Я лакер! :-)

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

            Ну семплы прошел, так что наверно будет. А вообще странно, да.

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

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

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

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

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

      а почему разное? может же быть и одинаковое.

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

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

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

Как решать 975?

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

    Ну, во-первых, эти 2 энда равны энду всех чисел. Вычтем этот энд из всех чисел, тогда нам надо разбить на 2, энд которых 0. Будем решать рекурсивно по битам. Посмотрим сколько у нас в данном бите нулей. Если их меньше 2х, то ответ, очевидно, 0. Если больше, то сначала просто вызовем для i — 1 бита, убрав i-й. Какие варианты мы посчитали, хотя не должны были? Ровно те, где все нулевые биты лежат внутри одного цвета. Тогда поэндаем все числа с нулевым битом, добавим получившееся число к массиву из тех, к которых в i-м бите единица (убрав этот бит), вызовем рекурсию и вычтем результат из ответа.

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

задачи отличные, особенно мне понравилась 500

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

Я определённо тупой, но как решать 250?

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

    Для каждой позиции(с 1) перебираем символ, берем наименьший подходящий.

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

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

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

    Не один такой :)

    Видел какие-то адские dfs'ы, но ломать побоялся. Ещё в комнате были совсем коротенькие решения (пара циклов), но какие-то они подозрительно простые.

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

Кстати, раз уж автор темы — Егор, несколько пожеланий по плагину:

1) Почему он импортит все функции с данным именем, а не только нужную? Если есть много перегруженных функций, то так можно случайно нарушить UCR. Это реально поправить, и будет ли это правиться в ближайшее время? :)

2) В окошке тестов очень не хватает hotkey-ев — без них на компе без мыши дебагать очень сложно.

3) В случае успешного прохождения тестов пишется, что они пройдены успешно, но таблички с временем по каждому тесту нет (а она была бы полезна, особенно учитывая, что это java, а не c++)

А вообще — замечательный плагин, с ним писать очень удобно. Спасибо за его разработку :)

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится
    1. Он импортирует все, а потом удаляет неиспользуемое. Должен по идее удалять перегруженные (но не переопределнные) с тем же именем (если только это не имя самой целевой функции для TopCoder или не main для обычных тасок)

    2. Надо будет стырить где-нибудь приличный редактор текстовый.

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

    Кстати, проект опенсорс, шлите полезные патчи. У меня на этот проект есть лицензия на Idea от JetBrains, кто будет контрибутить — поделюсь. Сам я в последнее время был занят очень, но постараюсь сделать то, что уже запланировал

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

      По поводу п.1 — он не удалил импортированные gcd(int, int) и gcd(long, long), а также pow(int, int, int) и pow(long, long, long). При этом в первом случае idea почему-то не понимает, что gcd(long, long) unused, но для pow понимает. Надо будет подробнее посмотреть.

      Будет время — постараюсь что-нибудь поcotribютить.

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

проходило ли в 275 дп за O(n2 * 2n)?

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

    Смотря какая динамика. Я, по своей глупости, написал динамику за O(n * 2n), а не простое решение. Есть гипотеза, что у вас такое же — откуда взялся квадрат в оценке?

    UPD. Прошло

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

      Объясни, плз, как ты считал динамику в этой задаче?

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

        dp[mask][f] — наибольшее количество инверсий, которое можно сделать буквами из множества mask, f — нужно ли, чтобы при этом строчка была не меньше оставшихся символов в minStr.

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

          Хотите прикол. Ответ на такую динамику будет cnt*(cnt-1)/2. где cnt свободные элементы в маске. Так что это по сути жадный, но вы этого не подозреваете.

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

            Во-первых, cnt * (cnt - 1) / 2 будет только в том случае, когда оставшиеся символы, расположенные в порядке убывания, не меньше остатка строки, если мы до этого все время выбирали ее префикс. Во-вторых, все в курсе. Бывает, что во время контеста начинаешь писать первое, что пришло в голову и проходит по времени, не подумав о более легких решениях.

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

        у меня было d[mask][eq] — максимальное число инверсий, которые можно получить буквами из множества mask, eq — равен ли построенный уже префикс префиксу строки minStr. при этом в дп мы следим, чтобы наша строка всега была не меньше minStr, для этого собственно и нужен второй параметр.

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

А арена сейчас только у меня не работает?