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

Автор ralekseenkov, 14 лет назад, По-русски
Сегодня я решил написать квалификацию TCO со своего MacBook Pro. До этого мне такая бредовая затея в голову не приходила, но сегодняшний день оказался для меня богат на подвиги.

За пол часа до начала контеста я понял что у меня в апплете не настроен ExampleBuilder, не установлена idea, не говоря уж о том что отсутствует дефолтный проект в котором решаются задачи. Одновременно с этим пришло осознание того, что на маке я ни разу не писал соревнования, а мой последний СРМ был 2 июля 2009.

Но не беда подумал я. Idea скачалась и установилась быстро, плагин настроился, а проект создался... как раз к началу соревнования.

Первая неприятность подстерегла меня после отрытия 250й задачи. Выяснилось что hotkeys для виндовой intellij idea не работают на маке... Предсказуемый сюрприз. Поэтому первую задачу я сдавал долго и мучительно, и сдалась она за 199.66.

Вторая задача сдалась лучше, за 406.29. Но неприятность поджидала за другим углом. Систем тест выявил, что программа работающая за 90ms на моем макбуке превышает лимит в 2 cекунды на топкодеровской конфигурации. Все дело, видимо, в различиях между ява машинами для mac os и linux, либо в том что topcoder использует linux с 2.4 ядром (хотя во вторую причину верится с трудом). Я конечно понимаю что глупо рассчитывать на оптимизации в JRE, и 200 млн. раз в цикле делать обращения к листу (ans += result.get(result.size() - 1)), тем более что можно вообще обойтись операцией умножения сделав все за O(1). Но тестирование на макбуке перед посылкой показало результат в 90ms именно на этом максимальном тесте, поэтому решение было послано без колебаний. В топкодер арене, естественно, решение на максимальном тесте запущено не было, т.к. подозрения на TL отпали после получения мгновенных ответов на локальном тестировании.

for (int i = 0; i < 2 * 10^8; i++) {
   ans += result.get(result.size() - 1);
}

Local: (Mac OS 10.6.3, JRE 1.5 or 1.6 - проверил обе, версия не имеет значения): 100ms
Topcoder (Linux w/2.4 kernel, JRE 1.5.0_03): ~5000ms судя по ответу админов

Обидно блин.

Последняя задача оказалась довольно таки легкой, и бинарный поиск был написан за 10 минут до конца соревнования. Запуск семпл тестов выявил пару неправильных ответов из-за обидного бага, закравшегося в решение. Освоение горячих клавиш для дебага программы оказалось за гранью разумного, поэтому последние 10 минут были потрачены не очень продуктивно. Как водится, баг был найден сразу после окончания соревнования.

В сухом остатке 1 задача вместо положенных 3х, и придется еще раз писать квалификацию. До этого дня мне казалось что такой исход событий невозможен :)

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

14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Да, во всём виноват макбук ))

P.S. в идее можно выбирать схемы горячих клавиш, в макоси и в винде по дефолту разные схемы стоят
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Ну, теперь мне не стыдно что я тоже завалил квалификацию :)
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Это урок всегда прогонять в арене макстест. Хотя бы после отсылки.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Да этот урок в последнем квале, я надеюсь, хорошо усвоил, ибо очень обидно сразу после сабмита делать ресабмит, осознав, что размер массива на пару элементов меньше, чем нужно, и решение на макс тесте дает segmentation fault... Зато хоть отбор прошел.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    С одной стороны да.
    • 14 лет назад, # ^ |
        Проголосовать: нравится +12 Проголосовать: не нравится
      С одной стороны да. С другой стороны это первый раз за многие годы когда возник такой необычный случай.

      Я, честно говоря, никаких уроков из вчерашнего участия в квалификации не извлек. Кроме того что нужно все-таки писать в знакомом окружении. Насчет тестирования в арене на максимальном тесте наверное ты прав, но разумно предполагать что значительной разницы между временами выполнения не должно быть, и имеет смысл тестировать в арене на производительность только если локально решение работает "достаточно долго", т.е. например более 0.5 сек. В этот раз это предположение оказалось неверно, но я не припомню других случаев в моей практике когда разница оказывалась столь серьезная - 50X.
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        А что за процессор на макбуке?

        У меня Celeron D 3GHz, Java 1.6 и твое решение на макстесте работает 6.5 -7 секунд. Если поставить ключ -server, то 650 ms :-)

        Разница серьезная получается как раз потому, что код неоптимальный.

        • 14 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Полностью согласен с тем, что первопричина заключается в неоптимальности кода, которую я проглядел в незнакомом окружении.

          Процессор 2.4 GHz (T8300) Intel Core 2 Duo, но это не имеет особого значения. Вроде и так понятно что 200 млн. раз взятие последнего элемента коллекции должно работать долго, а 100ms может получиться только в случае сильных оптимизаций.

          Вот еще что только нашел:
          In 64-bit, there is no client mode, so everyone get's the "server" mode, but with some thresholds tweaked to offer better startup time.

          Похоже у меня 64 bit и автоматически включен server mode. Плюс более мощный процессор. И ваши 650ms превращаются в 90-100ms. Разумное объяснение.
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Вот было бы здорово, если бы idea работала быстрее раз в 50 :) Правильно я понял, что и у тебя и на сервере jre hotspot?
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Вроде да.

    ralekseenkov / System / Library / Frameworks / JavaVM.framework / Versions / 1.6 / Home / bin / java - version
    javaversion"1.6.017"
    Java(TM)SERuntimeEnvironment(build1.6.017 - b04 - 248 - 10M3025)
    JavaHotSpot(TM)64 - BitServerVM(build14.3 - b01 - 101, mixedmode)

    Аещеятолькочтовыяснилчтовсемоиявыоказываетсяодинаковые: 

    ralekseenkov
    ls -l /System/Library/Frameworks/JavaVM.framework/Versions
    total 64
    lrwxr-xr-x  1 root  wheel   10 Dec  5 22:58 1.4 -> CurrentJDK
    lrwxr-xr-x  1 root  wheel   10 Dec  5 22:58 1.4.2 -> CurrentJDK
    lrwxr-xr-x  1 root  wheel   10 Dec  5 22:58 1.5 -> CurrentJDK
    lrwxr-xr-x  1 root  wheel   10 Dec  5 22:58 1.5.0 -> CurrentJDK
    lrwxr-xr-x  1 root  wheel    5 Dec  5 22:58 1.6 -> 1.6.0
    drwxr-xr-x  7 root  wheel  238 Nov 19 11:10 1.6.0
    lrwxr-xr-x  1 root  wheel    3 Dec  5 22:58 CurrentJDK -> 1.6

    Т.е. получается что явы 1.5 у меня в системе и нет. Похоже дело в том что 1.6 действительно лучше оптимизирует код.
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      А вот и минусы отсутствия предпросмотра для комментариев :) TeX проинтерпретировал мои доллары...
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Плохому танцору...
  • 14 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
    Это говорит человек, который не выходит из второго дива :) Всегда могут быть обстоятельства
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Гм. Но я же не пишу, что я не выхожу из второго дива из-за своего макбука или ещё чего-то там. Я просто недостаточно хорошо умею решать задачи на время. А вы просто недостаточно хорошо подготовились к контесту. Но виноват-то макбук, конечно. ;)

      • 14 лет назад, # ^ |
          Проголосовать: нравится +1 Проголосовать: не нравится
        Блин, ну если бы у тебя инет пропал во время контеста, или винда слетела, ты бы сказал что не решил утешительную задачу из-за того, что твой скил недостаточно велик?
      • 14 лет назад, # ^ |
          Проголосовать: нравится +1 Проголосовать: не нравится
        А Вы тоже чемпионат мира выигрывали? :)
        • 14 лет назад, # ^ |
            Проголосовать: нравится +1 Проголосовать: не нравится
          Нет :) Более того, я не считаю себя крутым прогером. Но говорить "Плохому танцору..." по моему мнению и чемпион мира не может.
          • 14 лет назад, # ^ |
              Проголосовать: нравится +1 Проголосовать: не нравится
            Вы не поняли) Это был вопрос к LoKi, а чемпион мира - ralekseenkov)
            • 14 лет назад, # ^ |
                Проголосовать: нравится +13 Проголосовать: не нравится
              А, фух. А то я и придумать не мог, как человек, который был чампом не может из нескольких контестов в первый див. 
              Я в танке насчёт ralekseenkov. Но судя по постам он конечно умный.
            • 14 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              Я аккурат в следующем году приехал в Саратов в роли школьника :) Нам тогда футболки не вручали, а вот нашим студентам вручили, да не простые белые, а супер-пупер (вроде жёлтые) :) типа как региону, который выйграл.
            • 14 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              Все-таки, ACM ICPC - командное мероприятие, и штраф за Too Lazy там небольшой, в отличие от топкодера.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Автор темы к твоему сведению - выигрывал чемпионат мира.
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

А как на квалификационный раунд попасть? 

Че-то у меня не получилось зарегатся на первый раунд, типа рега шла по приглашениям. Как можно приглашение получить?

  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Зарегистрироваться тут (там в правом верхнем углу оранжевый треугольник)
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Спасибо, до этого не замечал этот треугольник)
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Snail, это ещё не самое худшее что может быть от мака. Neuro решил на нём поработать немного, он умудрился об него как минимум порезаться - и это ещё не всё.
Закончилось это всё печально.
Такие дела.
Привет.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    ага, превед!
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Удивительно, казалось бы, корпусу эппловцы уделяют едва ли не больше всего внимания.

    Обо что там можно порезаться?