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

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

15 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится
Е - находим все прямоугольники a * b наименьшего периметра с площадью не менее n. Для каждого из них динамика - сколько можно построить пирамид с данным основанием (не более b), данной высотой (не более a) и данным числом клеток. Пирамида - это когда в следующей строке взяты все те клетки, что и в предидущей + слева и справа добавилось что-то еще
Теперь осталось совместить произвольную пирамиду с основанием b и высотой i и пирамиду с основанием b и высотой a - i + 1 у которой в предидущем слое менее b клеток и так, что в сумме выбрано n + b клеток (легче считать число не выбранных клеток)
15 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится
A и D писал pashka, знаю, что в А поток минимальной стоимости, а в D - какая-то халявная динамика, я эти задачи даже не читал
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Еще подскажите плз J. Блин обидно, всего за полтора часа прорешали все див2-задачи и ни одной див1 не придумали.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Как решать задачу С?
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +8 Проголосовать: не нравится
    Пойдем сканирующей прямой. Будем поддерживать все пересекаемые на текущий момент круги которые не лежат внутри других, отсортированные по центру. Тогда для очередного круга он либо лежит в floor для этого сета, либо в ceil, либо нигде
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      Спасибо! Всё оказывается не сложно. :)
      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        Я просто недавно решал задачу где данная задача для квадратов выступала в качестве подзадачи (там надо было построить дерево кто в ком лежит)
      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        Макс Гладких из СПбГУ сдал ее с помощью проецирования окружностей на рандомную прямую. (Исключил вложенные окружности таким способом.) Было бы неплохо, если б кто-то описал здесь этот метод.
        • 15 лет назад, скрыть # ^ |
           
          Проголосовать: нравится 0 Проголосовать: не нравится
          Метод именно в этой задаче или вобще проэцирования на прямую ? 
          • 15 лет назад, скрыть # ^ |
             
            Проголосовать: нравится 0 Проголосовать: не нравится
            Не уверен, что понял вопрос, но проекцию на прямую я, конечно, знаю как делать. Интересно, как таким способом можно исключить вложенные окружности за окололинейное время.
            • 15 лет назад, скрыть # ^ |
               
              Проголосовать: нравится +1 Проголосовать: не нравится
              Ну с помощью проэцирования на прямую я решал эту задачу так : проэцировал все центры окружностей на прямую, сортировал их, заводил список на массиве, а дальше в порядке от большего радиуса к меньшему, смотрел покрыли ли мы эту окружность, если не покрыли шёл вправо(по непокрытым и не рассмотренным) пока длина проекции не превысит радиус, аналогично влево выкидывал из списка всё что покрыл на этом шаге, выкидывал из списка рассмотренную, про время работы вобще не понятно просто работает достаточно быстро ;)
              • 15 лет назад, скрыть # ^ |
                 
                Проголосовать: нравится 0 Проголосовать: не нравится
                Коля, ты, вообще-то, на контесте писал scanline, насколько я помню. Или ты потом на дорешивании её пересдал таким путём?
                • 15 лет назад, скрыть # ^ |
                   
                  Проголосовать: нравится 0 Проголосовать: не нравится
                  Да на контесте был scanline, потом у Серёжи в a1, я эту штуку пробивал, причём код получается непрелично короткий, кстати, с последнего чемпа универа задача про ёлки так-же сдаётся только там даже со списками шаманить не надо
15 лет назад, скрыть # |
 
Проголосовать: нравится +8 Проголосовать: не нравится
В D простенькое дп f[номера ожерелья, номера игрока который сейчас ходит, ожерелье ещё цикл или уже лента]--максимальный результат для данного игрока.
Если третий параметр 0--ожерелье ещё цикл, то мы ничего не можем сделать кроме как разрезать его--переходим в f[i,3-j,1]. Иначе мы можем либо взять все алмазы и перейти из f[i,j,1] в f[i+1,j,0], либо взять из текущей ленты все кроме четырех, а потом четыре алмаза поделить пополам(это поможет нам закончить ход и вынудит противника закончить ход разрезом следующего ожерелья), то есть переход в f[i+1,3-j,0]
Ожерелья сортим по их длине по возрастанию(точно не могу доказать почему так,  так выгодней для первого :) )
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Как во втором дивизионе L и O решались? 
  • 15 лет назад, скрыть # ^ |
    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
15 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Кто автор(ы) контеста?
15 лет назад, скрыть # |
 
Проголосовать: нравится +5 Проголосовать: не нравится
Глупый вопрос, за который меня заминусуют, но все же: как принять участие в этих мероприятиях? Регистрация-то, оказывается, настолько приватна...
Вот на этой ссылке написано что-то про некие секторы и координаторов секторов. Это такие люди, ответственные за участников конкретного географического региона, и они посылают заявки непосредственно организаторам, я правильно понял? Где их найти, в таком случае?
  • 15 лет назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится 0 Проголосовать: не нравится
    Скорее всего такой человек есть в одном из  университетов твоего города
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    На сайте opencup.ru есть сверху ссылка Regions. Самары там нет. Это означает, что нужно либо договориться и ехать в ближайшее место, чтобы участвовать, либо написать по указанному на сайте адресу, что вы хотите завести у себя сектор.

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

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

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

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

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

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