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

Автор Egor, 16 лет назад, По-русски
На этих выходных состоится второй этап VIII Открытого Кубка по программированию им. Е. В. Панкратьева. Основной день для написания - 19 сентября в 11:00 MSD. Всем удачи
  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
В E видимо надо было использовать алгоритм поиска определителя, который не использует деление?

Как решалась J?
  • 16 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Предполагалось, да
  • 16 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Основная идея в J -- что туда надо прикрутить дерево интервалов с RMQ или чем-то подобным. Кодить довольно неприятно и много.
    Проще всего как-то так: разобьём планеты на максимальные по включению интервалы (т.е. если попали в интервал, то его весь облететь сможем, а всё остальное -- уже нет) и оффлайн обработаем все запросы.
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
А как решалась задача F?
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Может кто-нибудь подсказать, как делать Q из дива 2? Заранее спасибо)
  • 16 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Перебираем центральный элемент подматрицы (в случае нечетного размера) или центральную часть 2x2 (в случае четного размера). Пока возможно, пытаемся увеличить подматрицу. На каждом шаге увеличиваем размер на два, и проверяем, что верхняя строка равна перевернутой нижней, а левый столбец равен перевернутому правому. Получается алгоритм за O(N^4). Чтобы он зашёл, надо оптимизировать сравнение строк и столбцов. Например, с помощью битовых масок можно уменьшить число итераций в 64 раза.
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Может кто знает в чем особенность теста 21 в задаче I(кролики)?
  • 16 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
     У меня тоже не проходит 21 тест (TLE). Я определял на каждом луче сколько ему принадлежит точек. Это - не рациональный перебор. Быстрее перебрать точки не получается. Как же все-таки убить наибольшее количество зайцев быстрее?
    • 16 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      нене у нас WA. там решение n^2 log(n). Если нужно могу рассказать как это делается.
      • 16 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        Если можно, то расскажите поподробнее как это делается у Вас..
        • 16 лет назад, скрыть # ^ |
           
          Проголосовать: нравится 0 Проголосовать: не нравится
          Во-первых разных векторов может быть 21^2.(координаты по модулю < 10)
          Для каждого такого вектора v, разобьем всех кроликов на классы эквивалентности относительно этого вектора. (отношение эквивалентности: A~B - |A-B| || v.
          Отсортируем точки внутри каждого класса эквивалентности по x, потом по y. Теперь мы для запроса мы можем определить: класс эквивалентности в котором лежит точка выстрела за O(1), и сколько точек лежит на этом луче O(log n) - бинарным поиском.

          Как по точке (x, y)определить класс эквивалентности относительно вектора (a, b): с = -b * x + a * y;
    • 16 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      Нужно заметить, что возможных направлений не так и много.
      Для выбранного направления достаточно посортить все точки как если бы это направление было осью абсцисс и дальше бинпоиском найти то, что просят.
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Может кто-нибудь выложить задачи?
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Помогите с G, я подозреваю, что динамика, но никак не могу подобрать параметры и переходы...
  • 16 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +5 Проголосовать: не нравится

    Нет, там главное, - понять, что из-за МСТшности степень каждой вершины небольшая. Вооружившись этим фактом, понятно, что можно писать динамику по маскам в каждой вершине, либо даже всякое палево типа random_shuffle :)


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