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

Автор yarrr, 10 лет назад, По-русски
Теги tc, srm, 602
  • Проголосовать: нравится
  • +80
  • Проголосовать: не нравится

»
10 лет назад, # |
  Проголосовать: нравится +57 Проголосовать: не нравится

Лаконично.

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

Заметил интересную фичу — если во время challenge phase попытаться скомпилировать код по задаче, по которой у меня в таблице compiled, то я не только получу сообщения о том, что компилировать нельзя, но и статус в таблице изменится на opened.

Это что, так можно прятать различную бредятину, которую написал во время раунда, но не отослал? Ведь все comliled можно смотреть на сайте.

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

Как решать вторую в div 1?

  • »
    »
    10 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +6 Проголосовать: не нравится

    Я делал так. Во-первых, понятно, что можно считать, что в каждой паре xi < yi и ничего вращать нельзя. Теперь найдём минимум по x и минимум по y. Они либо в одной корзине, либо в разных. Если в одной — то надо просто выбрать N штук для второй, максимизируя площадь (это делается сортировкой по x, проходом в этом порядке и поддержанием set'а по y). Если в разных — то надо опять же посортить по x, перебрать, какой x пойдёт к минимальному y, тогда получается, что к минимальному x пойдут все x меньше этого + сколько-то с x не меньше этого (из них надо выбирать максимальные y, ясное дело). Это тоже считается проходом с set'ом.

    Upd. Правда, оно у меня упало на каком-то хитром тесте, видимо, руки у меня кривые :)

  • »
    »
    10 лет назад, # ^ |
    Rev. 3   Проголосовать: нравится +9 Проголосовать: не нравится
    1. Повернем все прямоугольники так, чтобы их вертикальная сторона была не больше, чем горизонтальная.
    2. Отсортируем их по неубыванию вертикальной стороны.
    3. Понятно, что длина вертикальной стороны сумки определяется длиной вертикальной стороны прямоугольника с наименьшем индексом, который попал в эту сумку. А длина горизонтальной стороны — минимум среди всех горизонтальных сторон.
    4. Понятно, что первый прямоугольник попадет в какую-то сумку. Пусть в первую. Теперь переберем i = [2..N + 1] — индекс самого левого прямоугольника во второй сумке.
    5. Понятно, что прямоугольники с [2..i-1] попадут в первую сумку. Тогда осталось распределить оптимально оставшиеся прямоуголь с [i + 1..2N]. Так как мы зафиксировали вертикальную сторону, то оставшиеся сумки выгодно распределять так: отсортируем их под горизонтальный стороне, первые сколько-то уйдут в одну сумку, а остальные в другую.
    6. Так как мы знаем количество прямоугольником в обоих сумках (i — 1 в первой, 1 во второй), то мы можем перебрать в какую сумку уйдет суффикс, а в какую — префикс оставшихся прямоугольников отсортированых по горизонтальной стороне. Пусть префикс уходит в сумку, в который сейчас находится A прямоугольников. Тогда в длина горизонтальной стороны этой сумки равна длине горизонтальной стороны первого оставшегося прямоугольника, а у другой сумке — это длина горизонтальной стороны (n — A + 1)-го оставшегося прямоугольника. Это можно вычислять за логарифм, если применить сжатие координат по горизотальным сторонам и хранить оставшиеся прямоугольники в дереве отрезков.
  • »
    »
    10 лет назад, # ^ |
    Rev. 3   Проголосовать: нравится +8 Проголосовать: не нравится

    Пускай X[i] <= Y[i]. Отсортируем пары по X.

    Если у нас была бы одна куча, то ответ: X[0] * min(Y[i]).

    Кучи две. Зафиксируем прямоугольник в каждой куче с самым мелким X. Первый — это 0, а по второму будем перебирать — пускай это будет i.

    Тогда ответ будет: X[0] * min(Y в первой куче) + X[i] * min(Y во второй куче). По нашему определению, все прямоугольники 1..i-1 идут в первую кучу. То есть, 1 <= i <= N. Осталось разобраться с остальными i+1..2*N-1 прямоугольниками. Назовём Z такой прямоугольник из i+1..2*N-1, что его Y минимален. Тогда есть 2 варианта куда он пойдёт:

    • В первую кучу. Тогда ответ первой кучи не может больше зависить от прямоугольников этой группы и мы добираем туда прямоугольников с как можно меньшими Y пока можем. Ответ: X[0] * min(min(Y в 0..i-1), Y[Z]) + X[i] * min(Y[i], (N-1)-ое наибольшее число в i+1..2*N-1)
    • Во вторую кучу. Тогда ответ второй кучи не может больше зависить от прямоугольников этой группы и мы добираем туда прямоугольников с как можно меньшими Y пока можем. Ответ: X[0] * min(min(Y в 0..i-1), (N)-ое наименьшее число в i+1..2*N-1) + X[i] * min(Y[i], Y[Z])

    min(Y в 0..i-1) можно преподсчитать, Z можно находить итерируя, а k-ое наименьшее/наибольшее число можно искать либо деревом отрезков, либо бинарными кучами.

    Ну и надо аккуратно написать, не завалившись на всяких пограничных случаях (i = N, N = 1 и.т.п.).

»
10 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

Не могли бы подсказать ссылку с обсуждением раунда на TopCoder? А то оно в сообщении появилось и я его успешно закрыл.

»
10 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

Как решать 1000 див2?

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    кроме как этого я предложить не могу...

    но вот как до этого дойти, самому интересно)

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

      Однажды на этот сайт мы попали на какой-то олимпиадке следующим образом: написали очень медленный алгоритм, посчитали начало последовательности и просто вбили его в Google:)

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

        да так и надо делать :) только можно сразу в оеис вбивать :)

        жалко что такие задачи дают на контестах с интернетом... получается кто быстрее найдет ответ, тот в плюсе

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

          Разве это не запрещено правилами? Не могу найти такого правила, поэтому спрашиваю.

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

Как скоро появится разбор на сайте?

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