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

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

Кто их сделал, поясните решение. Я так полагаю, тут какое-то хитрое решение с помощью теории вероятности.

Задачу E я решил, отправляя различные случайные алгоритмы. Прошел следующий:

Дотрагиваться до клеток с 1 по n. Затем обратно с n до 1.

Очень интересно решение задачи F.

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

14 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится
E) простое конструктивное решение: 2,2,3,4,5...,n,n-1,n-2,...,1.

F) отметим точками на прямой места где может быть этот многогранник и после каждого хода будем обновлять эти отмеченные точки. Дальше вкратце я делал так: есть два типа отрезков - 1) полностью заполненные точками 2) заполненные точками через 1  (типа 1, 3, 5,...). После каждого хода мы обновляем эти отрезки они увеличиваются в обе стороны на 1 (нужно следить за краями чтобы не вылезли за пределы 1 и n), потом пытаемся обработать соседние отрезки т.е. сделать так чтобы они не пересекались (по возможности объединяем соседние отрезки в один отрезок), а потом удаляем точку которую выбрал маг текущем ходом т.е. выбираем соотвествующий отрезок и делим его пополам если нужно. Самое главное то, что всегда отрезков будет не много. Изначально всего 1 отрезок первого типа.
14 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится
Задача Е:

Если куб находится на постаменте с нечетным номером, то достачно проверять:
1, 2 , 3, ... , n - постаменты.
Если же за первые N проверок так и не нашли куб, то он находился на постаменте с четным номером, тогда если после N проверок мы уже знаем четный или нечетный номер постамента, где находится куб.
Если нечетный, то снова проверяем от 1 до n, иначе проверяем от 2 до n.

Задача F:
Я хранил два множества, где может находится куб на текущий момент.
Одно множество для тех позиций, в которой мог оказаться куб, если он находится на четной позиции в самом начале, а другое множество если куб находился в начале на нечетной позиции.
При каждом касании постамента, изменял эти множества. Т.е. удалял из нужного множества номер постамента. Т.к. множества хранил отрезками, то еще для каждого отрезка нужно увеличить правую на границу на 1, а левую на 1 уменьшить. Если отрезки склеивать, то кол-во отрезков для множества, не превышает 2, если я не ошибаюсь :) Отрезок хранит множество всегда с шагом 2.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    дополнения к F:
    Если в конце оба множества пустые, то YES иначе NO
14 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
я когда увидел Е вспомнил эту головоломку
http://codeforces.me/blog/entry/292
там вроде как оптимальное решение за (n-2)*2 ходов (для n>2)
например
2,3 .. n-1, n-1, n-2, .. 2
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Интересно - как проверялась задача E на сервере. Неужели просто эмуляцией случайных блужданий? :)
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Кто нить может объяснить алогритм для задачи J.

    Что придумывали - ломалось на 6 тесте (

    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Для каждого ученика будем хранить F[i] - количество учеников, которые хотели бы, чтобы этот ученик был первым. Изначально все F[i] равны нулю.
      Для ученика на позиции с номером i посмотрим, каким он хочет быть по порядку. Отсюда несложно найти номер ученика j, который должен быть первым при таком порядке. Увеличим F[j] на единицу.
      После чего, нам надо найти такое i, что F[i] максимально.
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Для каждого ученика посчитать, с какого надо начинать, чтобы данный ученик выступил как он хотел. Тот, ученик который набрал большее кол-во очков - с того и надо начинать.
      пусть i - номер ученика в круге. a[i] - кем он хочет стать. Тогда надо начинать с ученика с номером (i-a[i]+1+n)%n.
      i от 0 до n-1.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Прочитай задачу F.
    Там существуют решения быстрее квадрата. Впрочем и решение на битсетах при неплохих оптимайзах заходит. По своей сути это чекер для E.
    • 14 лет назад, # ^ |
        Проголосовать: нравится +3 Проголосовать: не нравится
      Забавно, что ограничения в E и F сильно разнятся. Выглядит так, как будто жюри просит написать им нормальный чекер ;)
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
вы видимо не читали задачу F )
кстати людей которые сдали E, но не сдали F полно, а вот наоборот ни одного :)