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

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

Настала и моя очередь создавать тему про SRM :).
Буквально через час начнется очередной раунд. Желаю всем получить удовольствие и поднять побольше рейтинга. Жаль, что он начнется в еще рабочее время, но как говорится - работа работой, а SRM по расписанию.
Всем GL & HF !

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

13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Эх, а у меня в универе арена не коннектится... Не получится на паре SRM писать=)
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Я один за 5 минут до конца забил на кодинг и сел наблюдать за несколькими известными личностями (Петя в первую очередь), у которых одна сданная задача и текущее место в шестой сотне? :)


  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Я тоже забил)
    Я не могу придумать 1000.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Судя по таблице результатов, мало кто смог ее придумать:)

      Ограничения кусаются, очевидный метод не катит.

      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Было бы К поменьше.
        Раз в 10^5 (:
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          И как это Вам поможет? Мне бы помогло, если бы L было раз в 50 поменьше, тогда было бы всё ок.
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Угу, но тогда бы она была довольно скучна
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Я могу его понять. Я вот 500 написал на шару, не знаю пока, почему это не должно падать по TL.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
What happened with Petr?

P.S. I think he has some technical problems.
13 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Арена упала у всех или только у меня?

Upd. Мда не работает ни сайт, ни арена. TopCoder меня забанил?:)
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    У меня работает
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Видимо, только у Вас.
    Ну и у Пети, наверное.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    У меня на родном провайдере тоже упал ТопКодер и Твиттер заодно, подключился к соседу = ок.
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    Хмм.. что-то не так с этим раундом
    открыл код у одного участника из комнаты (ник Kornacker) по 500-ке. А у него весь код, отличный от дефайнов в одну строчку, 2/3 которой закоменчены... пролистал, увидел, что он возвращает переменную, которую использует только один раз, когда объявляет равной 0. ну я, не долго думая, попытался сделать челлендж третим тестом из условия. и что бы вы думали? метод вернул то что нужно!
    возможно, это какие-то проблемы с отображением переносов строк у кавиги в Java коде, но это тоже как-то непонятно, т.к. обычно все нормально.
    Попросил друга посмотреть, у него точно так же как и у меня отображает только одну строчку рабочего кода...

    может кто-нибудь знает в чем тут дело?

    UPD. у решения вердикт passed system test
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Не могли бы вы сказать номер комнаты, чтобы было проще искать?
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Можно по нику в div summary отсортировать.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        а ещё можно Main->Search и по нику найти в какой комнате... он пока ещё там)
      • 13 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

        Я думаю большой тест из 500 убрать и было бы получше - больше файлидов и челленджей...

        не туда ушло...
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      у меня тоже в одну строчку, но никаких Каваги
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      мде, либо с переводами строк проблема либо кто-то очень нехороший человек...
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Какая-то черная магия.

      ИМХО, беда с переводами строк.

13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Верно ли, что в 1000 надо использовать Карацубу либо БПФ? Я вроде приумал, как писать Карацубу, но не успел.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    По слухам из достоверных источников Карацуба не проходил
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Скажем, у меня решение за L * (log K + log L) - некоторое подобие Фурье (точнее, сначала я придумал Карацубу, а потом понял, как можно избавиться от одной из подзадач). Кажется, оно работало примерно за десятую секунды на макстесте.
    При этом важно отметить, что L * log L * log K не проходит один из тестов в условии по времени (я был крайне удивлён этим фактом на контесте, но к счастью, я довольно быстро придумал, как от этого избавиться). В Карацубе же вынести этот логарифм не получится (потому что сложность Карацубы = суммарная длина задач на нижнем уровне, в отличие от Фурье, где на нижнем уровне суммарная длина равна L). Поэтому Карацуба наверняка не должен был проходить.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Наивное решение на 500-ую правильное?
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Смотря, что вы подразумеваете под наивным.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      То что писали все :D
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        У меня прошло наивное.

        После контеста надо будет в практисах бинарником найти количество итераций, которые надо делать...

        У тиммейта вроде бы 1000 итераций не хватило.

        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Я смог подобрать тесты, где надо около 3700 операций делать. На большее ну никак. Сидел почти весь контест, искал подвох.
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Вроде 100000 хватало точно.
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            200000 хватало точно-точно.
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Я писал медленно и скудно, но писал не то что все, а точнее по смыслу то же, но у меня чистый n^2 * log(MAX_VALUE) каждое число высчитывал дихотомией, исходя из предыдущих, и так что бы следующим можно было составить что нибудь.
            • 13 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              Но как я понимаю у этих решений тоже логарифмическая сложность примерно, т.к каждый раз число хоть одно да уменьшается в два раза примерно.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    вот и посмотрим =)
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Если пройдет такое решение как и у всех - это будет самая худшая 500 за всю историю TopCoder :)
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Я возненавижу тогда эту 500-ку...Потому что я решился отправить ее только за 10 минут до конца, хотя написана она была где-то на 25 минуте контеста...Не отправлял из-за того, что думал над нормальным решением...
    • 13 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      А для меня лучшая 500-ка. Хотя минут 5 и тормозил до отправки, ибо думал, что за нафиг такой, не может быть всё так просто... ан нет. Passed.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
На редкость скучный систем тест получился. В совокупности с такой 500 - я ставлю этому раунду жирный минус.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    После систеста положение практически не поменялось (Div1):

    250: 7 Failed
    500: 28 Failed
    1000: 3 Failed
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Говно.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    С одной стороны - приятно впервые в жизни попасть в топ-60. С другой - обидно, что такой результат не на крутом проблемсете, а не несбалансированном чуде вроде "ну... сколько итераций... да ладно, 100000 пашет 0.05, значит можно даже 200000 поставить... должно быстро сходиться..."
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Я же написал выше, что можно решить и без кол-ва итераций, а за конечное число, и не нужно ничего подбирать.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Мы все равно рады за выигравших, особенно за 12-ое место :)
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    На codeforces говно плюсовать любят.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Я думаю большой тест из 500 убрать и было бы получше - больше файлидов и челленджей...
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    А еще можно дать в условии только такие тесты, где достаточно одной итерации.

    Но это слишком жестоко)

    Зато было бы намного интересней.

  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Фух, всё таки не я один писал дихотомию на 500 что бы не париться с итерациями, правда таких единицы :)
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    не сильно бы это повлияло. Я например написал наивное решение, потом чекер. Чекер 5 минут поработал, не нашёл тл-я и я немного ещё подумал и послал за 300 очков.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Надо помнить, что ресабмит снимает не так уж много очков, так что писать чекер 5 минут до сабмита чаще всего не выгодно
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        по-моему лучше подстраховаться и написать чекер, и потратить на это 3-5 минут, чем слать, а потом понимать что послал лажу
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Ну вот так 300 очков, а если сразу послать?
          Тут, конечно, стоит уметь оценивать вероятность того, что решение правильное
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            в принципе ты прав, но если бы я слал без этого всего, было бы у меня не 300, а 330 и вместо +101 было бы +111 к рейтингу. Не большая разница
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Так какая правильная идея 1000?


  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    быстро перемножать "многочлены", где степени складываются ксором
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Всё-таки не перемножать, а возводить в степень. Если возводить в степень перемножением, то будет TL, я гарантирую это.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Разве что Вы знаете способ перемножать такие многочлены за линейное время, в чём я всё-таки сомневаюсь.
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Можно ввести аналогию преобразования Фурье. И нужно будет один многочлен умножить на самого себя K раз, что значит сделать прямое преобразование, возвести в новом векторе каждый элемент в K-ую степень, и провести обратное преобразование, и вернуть нулевой элемент.
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Ну так это уже совсем другое дело - нужно не просто "быстро перемножать", а "придумать ФФТ для такой фигни".
            • 13 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              Я значит не совсем верно Вас понял, сорри
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Говно или нет, это дело такое.. слишком уж зависящее от собственного результата.
Условия не были особенно не оригинальными, так что все были в одинаковых условиях. Каждая задача, для решения требует определенных качеств. Видимо сегодняшние требовали в основном смелости;)
На мое мнение также повлияли результаты, но, возможно, оно подбодрит недовольных людей, как подбадривает меня после лажовых выступлений^_^
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
куда катиться мир... Petr - на 762-ом месте

13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Читаю обсуждения и не пойму: а что не так с 500, почему все его ругают? Написал относительно простое решение исходя из геометрических соображений (за n2), правда думал над ним слишком долго... А в таблице результатов какой-то треш творится =)

Первая несколько огорчила - надо было писать её быстро, а шумная университетская атмосфера и убогая клавиатура нетбука к этому не располагают. Зато условия простые и понятные =)
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Здесь ругают 500-Div1
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Именно про неё и говорю =)
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Поделитесь идеей?
        • 13 лет назад, # ^ |
          Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

          Построим график, отложив на оси абсцисс номер числа в заданной последовательности, а на оси ординат - его значение. Согласно условию, необходимо добиться, чтобы график был выпукл вниз (если соединить точки отрезками). Проведём прямую через первые две (например a[0],a[1]) точки. Сравним положение остальных точек относительно этой прямой. Если какая-то оказалась ниже, то сдвигаем вторую (a[1]) точку вниз на необходимое число единиц. На следующей итерации сравниваем оставшиеся справа (a[3], ...) точки с прямой, проходящей через вторую (a[1])  и третью (a[2]) точки, и т.п. Получается чистый квадрат, если я правильно понимаю.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Упёрто не верил во время контеста, что 500 можно решить влоб. А решить "по-сложному" не смог. Клыки ещё маловаты. Ожидал задачки 250 и 500 посерьёзнее.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

В 500 надо минимум 3897 итераций (проверено экспериментальным путем).

Откуда это число берется - не имею понятия)

  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    возможно, это лишь максимум на тестах, а теоретический максимум другой.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Авторы задач не предполагали возможности такого решения что ли?

      Если предполагали, то очевидно надо давать в тестах и "максимальный" - искомый таким и является в данном случае.

      Если не предполагали, то это не очень хорошие авторы.

      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Я думаю, если бы предполагали, то такой задачи не было бы вообще. По крайней мере на месте 500-ки. 

        Если сам автор придумал одно какое-то решение, то ему уже тяжело будет придумывать другие, т.к. обычно зацикливаешься на своем, которое, возможно, появилось еще до окончательного условия задачи. Другое дело, что тестеры обычно такое отлавливают.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Да нет. Может, это, типа, почти максимальный тест. А теоретический максимум, скажем, 3900 (хотя это было бы ничуть не более логично). Поскольку здесь вопрос лишь во времени, то плюс-минус 3 не так уж важно.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
peter50216 опять на высоте =)
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Забавно было весь контест пытаться вспомнить как пишется симплекс метод, чтобы загнать некую чернь по 500. Зато  с помощью этой черни можно доказать, что жадняк верен =)_
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Вопрос ко всем, кто писал жадняк - можно доказать его корректность и сходимость как-нить не через симплекс-метод?
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Ну очевидно, что если для каких-то трех последовательных условие выпуклости не выполняется, то средняя должна быть опущена ниже, т.к. если мы будем опускать другие 2, то выпуклым оно не станет. Следовательно, все что мы делаем в жадном методе форсировано и обязательно должно быть выполнено в оптимальном решении. 

      Почему сойдется? Например, потому что мы никогда ничего не опустим ниже, чем до уровня min(x_1, x_n). 
      • 13 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

        Спасибо, это гораздо проще моей черни. 
        Я пытался доказать так. Заменим каждое условие на xi - 1 - xi ≥ xi - xi + 1.
        Введем определение yi = xi - xi + 1. Тогда у нас есть некая последовательность {y}, которую надо сделать невозрастающей путем следующих преобразований: yi +  = δi, yi + 1 -  = δi. Нужно минимизировать сумму дельт, они все неотрицательны ( прямые ограничения на переменные), если пошаманить с ограниченями, то можно вывести и систему неравенств. Ну и так как решение всегда существует, то взяв начальное приближение из множества планов, на каждой итерации мы приближаемся по какой-то компоненте к решению, а раз решение есть, то многогранник решений замкнут, и мы не будем выходить за него. Ну и за конечное число шагов придем к решению.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Рунд отстой, это не 500-ка, если её сдают 500 человек. Задача может и неплохая, но давать её за 500 это идиотизм. Может быть участникам было-бы легче её решать, если бы она была первой за 250-300 очков. Этот срм один - из худших раундов на моей памяти.