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

Автор Jokser, 14 лет назад, По-русски
Закончился очередной этап.
Хотелось бы узнать решения задач A, D, E .
  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

14 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится
Е - находим все прямоугольники a * b наименьшего периметра с площадью не менее n. Для каждого из них динамика - сколько можно построить пирамид с данным основанием (не более b), данной высотой (не более a) и данным числом клеток. Пирамида - это когда в следующей строке взяты все те клетки, что и в предидущей + слева и справа добавилось что-то еще
Теперь осталось совместить произвольную пирамиду с основанием b и высотой i и пирамиду с основанием b и высотой a - i + 1 у которой в предидущем слое менее b клеток и так, что в сумме выбрано n + b клеток (легче считать число не выбранных клеток)
14 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится
A и D писал pashka, знаю, что в А поток минимальной стоимости, а в D - какая-то халявная динамика, я эти задачи даже не читал
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Еще подскажите плз J. Блин обидно, всего за полтора часа прорешали все див2-задачи и ни одной див1 не придумали.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Тупая симуляция казалось бы.
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Вы создавали собственный список? Мы решили что обычным сиппшным не зайдет так как по ассимптотике на грани.
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        На LinkedList-ах всё хорошо получается.
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Чуть ниже я запостил ссылку на наше решение
        Я на всякий случай сделал свои очередь и стек чтобы не париться
      • 14 лет назад, # ^ |
          Проголосовать: нравится +1 Проголосовать: не нравится
        У нас вообще на string прошло.
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Как решать задачу С?
  • 14 лет назад, # ^ |
      Проголосовать: нравится +8 Проголосовать: не нравится
    Пойдем сканирующей прямой. Будем поддерживать все пересекаемые на текущий момент круги которые не лежат внутри других, отсортированные по центру. Тогда для очередного круга он либо лежит в floor для этого сета, либо в ceil, либо нигде
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Спасибо! Всё оказывается не сложно. :)
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Я просто недавно решал задачу где данная задача для квадратов выступала в качестве подзадачи (там надо было построить дерево кто в ком лежит)
        • 14 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Я решал когда-то задачу, где надо было построить дерево по кругам и потом по нему, кажется, какая-то динамика была. Но там за квадрат строилось прекрасно. 

          Интересно, а зачем 7 секунд TL. Я решил, что можно как-то квадрат запихать, который и сел писать минут за 20 до конца от безысходности. Увы, это не так.:)
        • 14 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Это та, которая на кодечефе? Там насколько я понимаю, дерево отрезков сетов нужно?!
          • 14 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Господи, зачем так сложно?
            • 14 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              Честно говоря, копаться в коде не очень приятно. Не можешь, пожалуйста, рассказать идею
              • 14 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                Я тешу себя мыслью что там код очень простой и понятный. А идея такая же, как я описал чуть выше - даже чуть проще
              • 14 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                Задача о построении дерева из прямоугольников была на ACM Рыбинск-2010. На codeforces она обсуждалась.
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Макс Гладких из СПбГУ сдал ее с помощью проецирования окружностей на рандомную прямую. (Исключил вложенные окружности таким способом.) Было бы неплохо, если б кто-то описал здесь этот метод.
        • 14 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Метод именно в этой задаче или вобще проэцирования на прямую ? 
          • 14 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Не уверен, что понял вопрос, но проекцию на прямую я, конечно, знаю как делать. Интересно, как таким способом можно исключить вложенные окружности за окололинейное время.
            • 14 лет назад, # ^ |
                Проголосовать: нравится +1 Проголосовать: не нравится
              Ну с помощью проэцирования на прямую я решал эту задачу так : проэцировал все центры окружностей на прямую, сортировал их, заводил список на массиве, а дальше в порядке от большего радиуса к меньшему, смотрел покрыли ли мы эту окружность, если не покрыли шёл вправо(по непокрытым и не рассмотренным) пока длина проекции не превысит радиус, аналогично влево выкидывал из списка всё что покрыл на этом шаге, выкидывал из списка рассмотренную, про время работы вобще не понятно просто работает достаточно быстро ;)
              • 14 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                Коля, ты, вообще-то, на контесте писал scanline, насколько я помню. Или ты потом на дорешивании её пересдал таким путём?
                • 14 лет назад, # ^ |
                    Проголосовать: нравится 0 Проголосовать: не нравится
                  Да на контесте был scanline, потом у Серёжи в a1, я эту штуку пробивал, причём код получается непрелично короткий, кстати, с последнего чемпа универа задача про ёлки так-же сдаётся только там даже со списками шаманить не надо
14 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится
В D простенькое дп f[номера ожерелья, номера игрока который сейчас ходит, ожерелье ещё цикл или уже лента]--максимальный результат для данного игрока.
Если третий параметр 0--ожерелье ещё цикл, то мы ничего не можем сделать кроме как разрезать его--переходим в f[i,3-j,1]. Иначе мы можем либо взять все алмазы и перейти из f[i,j,1] в f[i+1,j,0], либо взять из текущей ленты все кроме четырех, а потом четыре алмаза поделить пополам(это поможет нам закончить ход и вынудит противника закончить ход разрезом следующего ожерелья), то есть переход в f[i+1,3-j,0]
Ожерелья сортим по их длине по возрастанию(точно не могу доказать почему так,  так выгодней для первого :) )
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Как во втором дивизионе L и O решались? 
  • 14 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +4 Проголосовать: не нравится
    В L - динамика по подмножествам. Если не знаешь, что это такое, то вот туториал:
    http://www.codeforces.ru/blog/entry/337
    Решение простое, но главное правильно понять условие. Вот код:
    http://pastebin.com/C1Mad9bx

    В O - здесь надо для каждого отрезка найти уравнение прямой - коэффициенты a,b,c и нормазиловать их (поделить на общий НОД). Далее все точки разделить на открывающие отрезок и закрывающие отрезок. Запихаем их в отдельный массив и отсортируем по возрастанию x, y, а если точки равны, то первой идет закрывающая точка.
    Заведем map, где будем хранить кол-во текущих открытых отрезков с соотв. коэффициентами. Я это сделал в виде:

    map<pair<long long,pair<long long,long long> >,long long> mp;

    Паиры - это a,b,c.

    Далее идем по массиву. Получаем координаты a,b,c отрезка, к которому принадлежит данная точка.
    Если точка открывающая, то прибавляем к итоговому ответу  текущее кол-во отрезков с данными коэффициентами и увеличиваем кол-во отрезков в мапе на 1.
    Если закрывающая, то уменьшаем кол-во отрезков в мапе на 1.
    Все хранить в long long' ах.
    Вот код:
    http://pastebin.com/PKmX55vt
    • 14 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
      В O приблизительно так же и делали, WA 12.
      Переписал нормально, WA 12.

      Странно, пойду подумаю.
14 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    интересный template.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Егор, если я правильно понял, то в Б вы использовали тот факт, что на все стороны натянуты дуги одного радиуса (а мы трихотомили по всем сторонам). А можно ли это как-то доказать ?
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Я не умею, я чисто интуитивно решил, что это так
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Вообще сам факт прикольный. А мы перебирали длину на одну сторону, вторую и трихотомили. только там для нахождения площади еще нужно было дихотомить :)
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Кто автор(ы) контеста?
14 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится
Глупый вопрос, за который меня заминусуют, но все же: как принять участие в этих мероприятиях? Регистрация-то, оказывается, настолько приватна...
Вот на этой ссылке написано что-то про некие секторы и координаторов секторов. Это такие люди, ответственные за участников конкретного географического региона, и они посылают заявки непосредственно организаторам, я правильно понял? Где их найти, в таком случае?
  • 14 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
    Скорее всего такой человек есть в одном из  университетов твоего города
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    На сайте opencup.ru есть сверху ссылка Regions. Самары там нет. Это означает, что нужно либо договориться и ехать в ближайшее место, чтобы участвовать, либо написать по указанному на сайте адресу, что вы хотите завести у себя сектор.

    Координатором может быть преподаватель кружка, если он есть. Координатор сектора нужен, например, чтобы все команды были в равных условиях (получили распечатанные условия вовремя, пользовались ровно одним компьютером, ...).
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Расскажите, как I решать. Мы часа полтора думали - не придумали :(
  • 14 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится
    Авторское решение предполагало persistent дерево отрезков.
    e-maxx, видимо, под впечатлением, даже добавил соответствующий пункт в конец статьи:
    http://e-maxx.ru/algo/segment_tree

    Т.е. надо придумать оффлайн-решение и навесить такую конструкцию. Как делать оффлайн вы же знаете, да?
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Да, оффлайн мы придумали с деревом отрезков. У Димы были даже некоторые неэффективные идеи, как сделать его 'persistent' :)
      • 14 лет назад, # ^ |
          Проголосовать: нравится +5 Проголосовать: не нравится
        А что неверного в следующем решении (оно слишком простое)?

        Для каждого места создадим массив отрезков в течении которых данное место было свободно. Также в каждом таком массиве удалим отрезки которые содержатся в других отрезках из этого массива, и отсортируем все отрезки по возрастанию их начал. Теперь чтобы узнать можно ли проехать от станции a до b, сидя на месте s нужно в s-ом массиве найти (бинарным поиском) отрезок у которого начало самое близкое слева от a, а потом проверить, что b левее правого конца найденного отрезка (иначе проехать на месте s нельзя).
         Чтобы решить исходную задачу т.е находить минимальное s можно создать дерево интервалов в вершинах которого будут массивы отсорченых отрезков (и лишние удалены) из массивов детей данной вершины. А в листьях просто массивы для соотв. мест. Ну и потом спуск по дереву, чтобы находить ответ. Сложность будет (log(s + m))^2 на 1 запрос.
        • 14 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Это верное решение (прошло на дорешивании). Так, что никаких персистент деревьев не нужно:)
14 лет назад, # |
  Проголосовать: нравится -9 Проголосовать: не нравится

Интересно, что такие посты не вызывают общественного раздражения)

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

Задача H кстати -- это задача H с Neerc 2006.

 

  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Ну не совсем она, но к ней сводится. Все же мы добавляли фиктивную вершину и Ваня "хитро" строил поток. Вообще у нас была проблема с пустым множеством вершин (которое подходит под условие кроме своей мощности). Может можно ее как-то проще свести к задаче H с NEERC ?
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Говорят, что там вообще жадность проходила (выкидывание вершины с наименьшей степенью)