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

Автор PavelKunyavskiy, 15 лет назад, По-русски
Сегодня (30.01.10) прошел второй отборочный раунд на ИОИП. Предлагаю здесь обсудить задачи.
  • Проголосовать: нравится
  • +7
  • Проголосовать: не нравится

15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Было бы интересно узнать решение задачи С. 
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Я BFSом набрал 40 балов(но решение точно неправильное)
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Нечто бфс-подобное набирает 45. Решение за квадрат набирает 30, хотя обещали 60 за куб. Возможно что баги у жюри, но пока нет тестов сказать нечего.
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Отправлял когда ложился сервер, но успел прочитать что у меня 100.
    Решение примерно такое:
    Каждая вершина будет принадлежать какой-то сосне. Если это вершина, в которой другая сосна-ветка крепится к стволу, то эта вершина принадлежит стволу. Храним уровни всех вершин, изначально - нули. Будем удалять листы в порядке убывания уровня. Сначала все листы - сосны уровня 0, и при переходе в предков, уровень предков станет 1, потому что у 0-сосен нету ствола. При всех других переходах возможны два случая:
    1. Переход из собственного ствола в него же. Т.е. все ветки текущей сосны уже удалены, или их не было, и сейчас алгоритм просто перемещается по стволу текущей сосны. Ясно, что уровень сосны менять не надо.
    2. Переход из одной сосны в другую. Иногда будут переходы от одной сосны к сосне-родителю. В этом случае надо увеличить уровень сосны-родителя на 1.
    Как узнавать какой случай сейчас рассматривается? Достаточно тривиально: если степень вершины-предка 2 или 1, то мы перемещаемся по стволу. Если степень вершины-предка 3 или больше, то это переход в сосну-родителя. Теперь просто обойдем в таком порядке все дерево и в итоге будет заполнен массив с уровнями сосен. Вывести максимум не составит труда.
    Для решения, которое укладывается по времени можно использовать сбалансированное дерево поиска, которое хранит параметры которые нам нужны (первичный: степень вершины, вторичный: уровень вершины). Выбирая каждый раз минимум из дерева поиска, можно будет за логарифм изменить предка этой вершины-минимум и соответственно удалить саму вершину-минимум. И так, пока дерево не опустеет.
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится +3 Проголосовать: не нравится
      А можно объяснить как из условия понять что бамбук имеет уровень 1?
      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        Если бамбук - цепочка вершин в количестве более чем 2, то да:
        "Будем называть сосной нулевого уровня граф из двух вершин, соединенных ребром."
        "Сосна k-го уровня представляет собой путь, который называется стволом, к некоторым вершинам которого прикреплены сосны уровней не больших k−1."
        Не очевидно, но если обдумать, то становится понятно, что все вершины кроме одной - ствол, последняя - сосна-ветка. Основной упор стоит сделать на первую из двух цитат.
        • 15 лет назад, скрыть # ^ |
           
          Проголосовать: нравится +3 Проголосовать: не нравится
          Ну видимо если сильно придираться к условию, то согласен. Вообще из определения можно сказать так. Весь граф ствол, из него не торчит ничего поэтому уровень 0. И вобщем-то с этим сложно поспорить.
        • 15 лет назад, скрыть # ^ |
          Rev. 2  
          Проголосовать: нравится 0 Проголосовать: не нравится
          В принципе я знаю много людей, которые посчитали что бамбук имеет уровень 0. Тем более, что не очень есть возможность задавать вопросы, на мой взгляд корректнее было бы засчитывать оба понимания.
          • 15 лет назад, скрыть # ^ |
             
            Проголосовать: нравится 0 Проголосовать: не нравится
            Ну я первые 11 попыток не мог понять это, и получал 80 баллов, сначала хотел написать им что у них баг, так-как более оптимальное решение проходит меньше. Но потом посмотрел что нулевой , это только один вариант. 
            • 15 лет назад, скрыть # ^ |
               
              Проголосовать: нравится 0 Проголосовать: не нравится
              аааа!!!! вот оно что! Я как раз думал что бамбук имеет уровень 0. Писал динамику за линию (примерно как описывал ZoomZoom). Вот почему WA! 75 баллов именно из-за того что не понял этого. Спасибо за разъяснения - )
          • 15 лет назад, скрыть # ^ |
             
            Проголосовать: нравится +5 Проголосовать: не нравится
            > корректнее было бы засчитывать оба понимания

            Мне кажется, не стоит об этом мечтать. В условии все четко написано. Хотя конечно по-хорошему надо было еще нарисовать на видном месте пример с бамбуком.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
В задаче В(Улей) я вывел формулу 3n2 -3n + 1.
Но почему-то у меня всего 66 балов. Вроде бы правильно, int64 использовал, проверял на примерах, к примеру, на N=109 ответ равен 2999999997000000001, кажется?!
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
а показ количества баллов по посылке это баг или сегодня были немного другие правила чем в первом отборочном раунде?
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
у вас тоже в клиент не заходит?
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Как решали задачу D?
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    я на 60 сдал за квадрат. если нужно напишу как
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Мысль первая. Если отрезок вложен в отрезок, то надо чтобы вложенный сидел ближе к выходу. Иначе все равно.
    Мысль вторая. в отрезок может быть вложен только меньший по размеру, поэтому посортировали по длине - получили вторую строку ответа.
    Дальше взяли RMQ или фенвика и посчитали количество пересечений. Это делается так. Посортировали события. Если кто-то сел или встал - то вязли сумму на отрезке, потом изменили соответствующее значение на 1 или 0.
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      я ставил следующего по времени входа чувака (i-го) на место n-i (нетрудно убедиться в правильности этого алгоритма)
      при удалении чувака считал скольких он пройдет, идя к выходу
      писал в конце, не успевал написать rmq (хотя скорее поленился), поэтому считал втупую за линию количество людей которых нужно пройти
      с rmq получится решение на 100
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      Если не сложно, поясните как врубиться в декартово дерево, и для чего оно используется в этой задаче на понятном  языке. Спасибо.
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

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


  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Я сдал на 100 вроде. Решение такое:
    Посортим всех по времени захода. Утверждается, что если рассадить их в обратном порядке
    (т.е. v[i]-того человека сажать на (1000 - i) место), то это будет нужной рассадкой.
    Очевидно, что по факту у нас есть отрезки на прямой, и нам надо посчитать количество пересечений этих отрезков. Я делал это с помощью декартового дерева. Наверно, можно легче.
    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      Подскажите подробнее , как Вы использовали декартово дерево в этой задаче. И вообще как разобраться с этим декартовым деревом? Почитал RMQ, Фенвика там считаются какие-то суммы на отрезке, а здесь что?
      • 15 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится
        Попробую объяснить. Заметим, что количество неудобств равно количеству пересечений отрезков(именно пересечений, без вложений!).Возьмем наш массив пассажиров, отсортированный по времени входа. Будем обрабатывать наших пассажиров с 0 по N - 1. Пусть мы сейчас обрабатываем участника с номером i. Тогда в декартовом дереве мы храним времена выхода пассажиров с 0 по i - 1. Понятно, что отрезки (вход-выход) пассажиров с 0 по i - 1 пересекают отрезок(вход-выход) i-того пассажира только если их конец лежит между началом и концом i-того отрезка. А количество таких концов очень легко найти с помощью декартового дерева. Вот и все.
        • 15 лет назад, скрыть # ^ |
           
          Проголосовать: нравится 0 Проголосовать: не нравится
          Вы очень подробно описали своё решение. Спасибо. Но, хотелось бы уточнить и понять, в том ли направлении я думаю. Мы сортируем участников по времени входа. Потом по времени выхода строим декартово дерево. А как Вы определяете вторую строку ответа. Другие мои мысли: если просто нарисовать отрезки на плоскости для каждого участника (т.е. например для первого начало (1,1) -  конец (1,8)  и т.д. , то что остается только перебрать каждый с каждым и посмотреть на их пересечение. А Вы в своём решении смотрите на  пересечение  (вход-выход), а где это пересечение не могу понять. Что-то я до конца не могу разобраться с этой задачей. Если Вам не сложно нарисуйте схематически рисунок для теста, чтобы понять какое это дерево и где то пересечение о котором Вы говорите. Сам я что-то туплю в этом. Спасибо.
15 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится
Спасибо.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Результаты вышли
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
А С как решать?
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Уже был этот вопрос. См.выше.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Покажите кто-нибудь 100 % решение задачи D на Паскале. Спасибо.
15 лет назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится
За 10-15 минут до конца было почти нереально  отправить решение. Наверное там что-то поломалось. Обидно за 20 баллов(
15 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится
а кто еще кроме меня получил не 100 по С,  потому что бамбук имеет уровень 1?
15 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится
кто нибудь может откомпилить check.java на задачу D и залить куда нибудь?пожалуйста, очень надо!
15 лет назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится
Сколько баллов надо чтобы пройти на 3 тур
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Можно с этой олимпиадой в университет поступить?
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Насколько я понимаю, эта олимпиада в любом случае дает 100 баллов по информатике и некоторые вузы могут засчитывать эту олимпиаду как вступительное испытание или даже зачислять. Все это по выбору университета.
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    в ИТМО точно можно!
    если будешь победителем - добро пожаловать на все факультеты
    2,3-ий диплом - ограничения на некоторые факультеты или допол. экзы
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
5дней...
Почему в четвертой задаче "Маршрутное такси" во вторых выходных файлах 1ый пассажир сидит на 10ом месте? Если по условию "Все места расположены в ряд и пронумерованы от 1 до n", а n во вторых входных файлах равняется пяти.