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

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

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

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

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

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


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

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

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

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

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

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

    UPD. у решения вердикт passed system test
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Верно ли, что в 1000 надо использовать Карацубу либо БПФ? Я вроде приумал, как писать Карацубу, но не успел.
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    По слухам из достоверных источников Карацуба не проходил
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Скажем, у меня решение за L * (log K + log L) - некоторое подобие Фурье (точнее, сначала я придумал Карацубу, а потом понял, как можно избавиться от одной из подзадач). Кажется, оно работало примерно за десятую секунды на макстесте.
    При этом важно отметить, что L * log L * log K не проходит один из тестов в условии по времени (я был крайне удивлён этим фактом на контесте, но к счастью, я довольно быстро придумал, как от этого избавиться). В Карацубе же вынести этот логарифм не получится (потому что сложность Карацубы = суммарная длина задач на нижнем уровне, в отличие от Фурье, где на нижнем уровне суммарная длина равна L). Поэтому Карацуба наверняка не должен был проходить.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Наивное решение на 500-ую правильное?
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Если пройдет такое решение как и у всех - это будет самая худшая 500 за всю историю TopCoder :)
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Я возненавижу тогда эту 500-ку...Потому что я решился отправить ее только за 10 минут до конца, хотя написана она была где-то на 25 минуте контеста...Не отправлял из-за того, что думал над нормальным решением...
    • 15 лет назад, скрыть # ^ |
      ← Rev. 2  
      Проголосовать: нравится 0 Проголосовать: не нравится

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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