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

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

24 и 25 мая 2014 года состоится «Московский фестиваль спортивного программирования VIII Кубка им. И.Н. Векуа», проводимый совместно Московским государственным университетом им.М.В.Ломоносова и Московским физико-техническим институтом (государственным университетом) на базе московского учебного центра МФТИ.

В рамках Московского фестиваля по спортивному программированию пройдет очный тур Международной олимпиады по программированию на Кубок И.Н. Векуа.

Олимпиада будет проходить одновременно на 5 площадках: в Тбилиси, в Москве, в Новосибирске, в Виннице и в Санкт-Петербурге. На главной площадке чемпионата в Тбилиси соберутся команды со всего постсоветского пространства, вышедшие в финал Международного чемпионата ACM ICPC по спортивному программированию.

«Московский фестиваль спортивного программирования VIII Кубка им. И.Н. Векуа» является уникальнейшей возможностью принять участие в престижной Международной олимпиаде "у себя дома" и, благодаря прямой трансляции, стать очевидцем основных событий чемпионата в Тбилиси.

Московский фестиваль спортивного программирования пройдет в 2 тура:

  • 1 тур — командный зачет на VIII Кубок им. И.Н. Векуа;
  • 2 тур — шестой личный чемпионат "MIPT open".

После чемпионата пройдет награждение участников. Церемония награждения победителей личного и командного контестов будет проводиться по итогам результатов «Московского фестиваля спортивного программирования VIII Кубка им. И.Н. Векуа» на площадке города Москвы.

«Московский фестиваль спортивного программирования VIII Кубка им. И.Н. Векуа» ставит перед собой цель собрать команды для очного поединка, команды-резерв для состязания с лучшими командами мировой программистской элиты.

Фестиваль пройдет в Московском корпусе МФТИ (г. Москва, Дмитровское шоссе, д.9, Учебный центр МФТИ).

Предварительное расписание.

Участие бесплатное, регистрация на сайте открыта до 23 мая 2014г.

ВНИМАНИЕ! Регистрация отдельная на каждый тур!

Подробную информацию вы можете получить в Центре развития ИТ-образования МФТИ по тел. +7-495-408-56-18, e-mail: [email protected].

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

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

Не понятно из текста. К участию допускаются все команды или только финалисты?

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

К участию допускаются все студенческие команды. Более того, если на площадке выразит желание участвовать команда ветеранов, она тоже будет соревноваться в зачёт Кубка Векуа (в соответствии с правилами Кубка).

Обращаю внимание на то, что, так как итоги XIV Открытого Кубка им. Е.В. Панкратьева по программированию уже подведены, площадки в рамках секторов OpenCup закрыты. Тем самым участие московских команд в зачёт Кубка Векуа из секторов не допускается, равно как и заочное участие, и площадка в рамках Фестиваля является единственной официальной площадкой VIII Кубка Векуа в Москве.

Правила проведения личного чемпионата Москвы по спортивному программированию MIPT Open будут опубликованы в ближайшее время на техническом сайте соревнований, который будет открыт на платформе SnarkNews. Пока что рассматривается выбор из обычного ACM и системы TCM/Time. Результаты личного чемпионата Москвы также пойдут в зачёт личного тура VIII Кубка Векуа наряду с результатами участников, которые будут принимать участие из Тбилиси.

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

Где можно узнать информацию о площадке в Санкт-Петербурге?

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

Онлайн-зеркало будет?

Или хотя бы тренировки на СF потом.

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

    У Вас есть логин OpenCup? Совершенно точно будет тренировка на сервере OpenCup. Насчёт онлайн-зеркала не уверен.

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

А чем обсусловенно такое странное раписание? То есть у многих студентов сейчас сессия надвигается, важные пары в субботу, а командный контест именно в этот день.

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

Будет ли на OpenCup трансляция личного турнира в воскресенье?

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

    Как минимум предполагается; возможно, что с каким-то сдвигом. Детали будут объявлены в субботу.

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

Как доказать решение n % 2? Alice:Bob в задаче A? Как нормально реализовывать I и с какой асимптотикой?

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

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

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

      А где в четной штуке центр?

      Еще такой вопрос — это только у нас борд не обновлялся, пока не посабмитили?

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

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

        Например, для n = 4 на такой ход:

        ....
        ..o.
        .o1o
        ..o.
        

        надо отвечать так:

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

    Мы в I сдали O(10 × T × N × M). Находим самый верхний левый включенный пиксель и перебираем цифру, которую пытаемся поставить туда, теперь повторяем это, но уже с выключенными пикселями. Самое сложное — захардкодить циферки.

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

А как решалась задача Е? Можно ли её решить за один запуск FFT на тест?

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

    Мы без FFT, но с Фенвиком. Восстанавливаем ответ по битам. Пусть мы хотим восстановить бит 2k - 1, где . Тогда начнём идти слева направо и подсчитывать текущую сумму на префиксе по модулю 2k. Чтобы сумма на каком-то отрезке получила единицу в нужном бите, нужно, чтобы она была больше или равна 2k - 1 (по модулю). Теперь после добавления очередного элемента нужно всего лишь посчитать количество сумм на префиксах в каком-то зацикленном отрезке, что делается запросами к дереву Фенвика. Итого с очень хорошей константой и линейной памятью.

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

    Говорят, FFT получало ТЛ.
    Мы сдали такое решение: сумма на отрезке [i;j]sj - si - 1, где s — массив префикс-сумм. Будем решать задачу по каждому биту отдельно, проверять, присутствует ли он в ксор-сумме ответа. Для каждого значения sj нужно посчитать, сколько есть подходящих i ≤ j. Для этого можно использовать бор: если мы проверяем бит k, то будем добавлять в него младшие k - 1 бит каждого числа sj, и посчитаем для всех вершин в боре v динамику cnt[v][0|1] — число листьев в поддереве v таких, что k-й с конца бит соответственно равен 0|1. Зная эту величину, можно посчитать число подходящих индексов i, спускаясь по дереву — нужно разобрать несколько случаев. В конце получается что-то вроде такого: если сейчас k-й бит равен x, и спускаемся по ребру, на котором написано y, нужно добавить cnt[v->!y (противоположное ребро)][x ^ y]. Итого — O(nlog2n).

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

    Я писал FFT(2 запуска на тест), и это аксепт. А как за один? З.Ы. Была похожая задача, только там нужно было посчитать

    Unable to parse markup [type=CF_TEX]

    , а здесь это

    Unable to parse markup [type=CF_TEX]

    . Решается кстати за O(maxi{si}).
    • »
      »
      »
      11 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      А как за два?

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

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

        fi = xi + i * yi.f2 = fft(f)

        . И по

        f2

        востанавливаем образы $fx, fy$.

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

Как С(геом) решать?

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится +19 Проголосовать: не нравится
    1. Любые два непересекающихся по внутренности выпуклых многоугольника можно разделить прямой
    2. Прямая высекает на окружности некоторую "шапку", каждая шапка однозначно задаётся своей высотой от 0 до 2R
    3. Отдельно для каждого многоугольника найдём минимальную высоту шапки и проверим, что сумма не более 2R
    4. Рассмотрим оптимальную шапку. Если на дуге лежит меньше одной вершины многоугольника, то его можно сдвинуть и шапка не минимальна.
    5. Если на дуге лежит хотя бы две вершины многоугольника (не обязательно соседние, прошу заметить), то их можно за квадрат перебрать, однозначно восстановить окружность, а потом за линию проверить, что все точки действительно лежат внутри окружности (этого достаточно, чтобы многоугольник лежал внутри). Если это так, то нетрудно показать, что минимальная "шапка" касается окружности с центром в центре изначальной и касающейся нашего многоугольника. То есть нужно найти расстояние от центра окружности до многоугольника и проверить, лежит ли он внутри или снаружи — это делается двумя циклами (один ищет расстояние до сторон, как до отрезков, а второй ищет минимум ориентированного расстояния до сторон многоугольника).
    6. Случай попроще. Если ровно одна точка лежит на дуге — то попробуем сдвинуть его влево или вправо, а потом вверх. Если не можем — значит, упёрлись, причём это могло произойти только если вершина многоугольника оказалась в середине дуги. Попробуем повернуть многоугольник. Если получилось, то низ чуть-чуть поднялся и шапка не минимальна, а если не получилось — срез шапки проходит через сторону многоугольника. То есть опять можно за квадрат перебрать пару (вершина, сторона) и попробовать запихнуть многоугольник в конкретную шапку.
    • »
      »
      »
      11 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Классно, спасибо. С "шапками" прикольная идея.

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

Как решать задачу про минимизацию BOB?

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

    Стандартная динамика. Состояние — мы уже восстановили какой-то префикс s, при этом максимальный суффикс, совпадающий с каким-то префиксом BOB имеет длину k (да, как в КМП).

    После этого делаем один или два перехода, соответствующие буквам.

    Чтобы посчитать динамику один раз и быстро отвечать на запросы, состояние делаем с правильной стороны: уже поставили x букв одного типа и находимся в позиции pos. Количество поставленных букв другого типа автоматически восстанавливается. Чтобы ответить на запрос, нужно взять лучший из ответов для pos = |S| и n - X ≤ x ≤ X, что делается Фенвиком.

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

      Не совсем понятно. За сколько это работает?
      "уже поставили x букв одного типа и находимся в позиции pos". Это квадрат состояний, или я что-то не понял? Квадрат (при n = 1000) состояний и на тысячу тестов выглядит довольно шатко для двух секунд.

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

        Да, это квадрат состояний и квадрат же переходов, всё верно.

        Прекрасно работает, у нас же сумма длин строк не более 105 (или что-то похожее, сильно меньше миллиона). Поэтому суммарное время работы можно оценить как суммарную длину, умноженную на максимальную длину одной строки, итого 108.

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

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

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

            Упс, правильно помните.

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

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

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

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

Как решать Б(личная) быстрее, чем за 3^n? Или это пихается все-таки?

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

    Да, мне тоже интересно. Я почему-то думаю, что все сдали перебор, поправьте меня "все", если я не прав. =)

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

    Отсортируем рюкзаки по убыванию веса. Очевидно, что надо использовать несколько самых больших. Будем заполнять сначала самый большой рюкзак, потом следующий и так далее. Динамика для подмножества: количество рюкзаков, которые придется заполнить, и вес, использованный в следующем (минимизируем первое, при равенстве второе). O(n2n)

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

      Признаю, был не прав, красивое решение:)

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

Как доказать в H для множества у которых bonus < damage, что битвы в порядке уменьшения бонусов это верное решение?

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

Есть ли дорешивание?

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

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

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

Кто-нибудь умеет решать F (личный тур)? Много раз видел похожие задачи, ни разу не разобрался. Может есть какие-то идеи, похожие на решение.

Еще вопрос на засыпку. Я написал такое решение, шел сканлайном слева-направо и если замечал, что что-то можно помержить мержил. При этом перед каждый преобразованием я поворачивал все на 90 градусов. Долго думал над тестом, так и не придумал, получил TL9, отсюда сделал вывод, что такой тест существует. Может кто-то знает, как он выглядит?

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

Как решать E(личная)?

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

    Перейдем от количества в коробках к количествам в префиксе, тогда определить в i коробке будет Si -S(i-1). Префиксов n+1 штука(включая нулевой), даны ребра — веса для перехода. Построить граф, найти на нем остовное дерево.

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

Задачи где-нибудь можно найти? И будет ли какая нибудь дорешка или где нибудь материалы найти можно?