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

Автор AlexErofeev, 14 лет назад, По-русски
Полагаю, все команды уже вернулись с южного четвертьфинала NEERC, который в этом году проходил 20-23 октября. Вот как он прошел для нас.
Приехали мы в Саратов 20 октября утром - в день пробного тура. На открытии объявили, что писать мы будем в библиотеке СГУ. Крайне интересно, как производилось распределение - в одну из аудиторий 12 корпуса посадили практически все топовые и приближенные к таковым команды. В библиотеку же отправили множество не самых сильных участников. Стало как-то даже грустно что ли. Как оказалось, библиотека была очень хорошим и удобным местом для проведения соревнования. В отличии от той большой аудитории в 12 корпусе,  где мы писали контест в прошлом году и было очень тесно (проблему вызывало даже отодвинуть стул назад, чтобы пересесть - там сидели другие участники, не говоря уже о том, чтобы пройти по проходу), хоть в библиотеке и сидело очень много команд (чуть меньше половины от всех участников), там было очень удобно и комфортно.
На пробном туре были незначительные проблемы с рабочим местом, но они быстро и успешно разрешились и, несмотря на все опасения, повторно не возникли.
На Code Game Challenge написали достаточно простой алгоритм управления hovercraftом. Сильного желания придумывать изощренную качественную эвристику не было, ибо главной целью был все таки предстоявший контест, да и пришли мы на тур Code Game Challenge слегка не рассчитав время, опоздав примерно на 10 мнут к началу и основательно промокнув. (Неплохо черпанули воды в ботинки по дороге под сильным дождем. В итоге писали полностью босиком =) Сидели около окна и холодной батареи. Обернулись - сзади у батареи уже стояли чьи-то кроссовки =) Видимо, команды Samara SAU #1 =) ). По ходу тура выяснилось, что зачастую бот падает (появлятся решетка возле его имени и больше  бот не двигается), причем непонятно почему. Мы довольно долго усиленно сканировали глазами наш код, пытаясь найти место, где мог возникнуть runtime error. Однако потом неизвестным образом смогли также "уронить" бота и играя как "Gamer", т.е. при ручном режиме управления с клавы. Такое случалось примерно в 20-25% случаях и причину выяснить мы не смогли. После этого проще всего было списать падения бота на это же. Впрочем, на Code Game Challenge Show, как нам сказали, наш бот не падал ни разу, так что, возможно, имел место какой-нибудь локальный глюк.
На следующий день был основной тур.
После начала я сел читать задачи с конца, Артем - с начала. Он довольно быстро наткнулся на задачу B(3D City Model) и отдал мне ее писать. Я отадал ему додумывать задачу J(Buoys). Шаблон был готов и довольно скоро пришел первый Accepted. Вместе с B много кто сдавал задачу F(Elevator). Я прочитал и хлопнул себя по лбу: "Чуть ли не халявнее, чем B!". В общем, скоро нам зачли и вторую задачу.
Насчет третьей приведу рассказ Артема и Вовы:
-Ну, в C(Explode 'Em All) Артем сразу вцепился.
-Я увидел. что ограничение 25 и сразу решил, что это перебор. Только получалось 25*2^25 - много. Смотри, что делаем: разделяем все строки на 2 части и считаем для каждой маску столбцов, а затем делаем побитовый OR для всех пар.
Идея несложная, какое-то время ушло чтобы написать, потестить, вместе с Артемом нашли пару багов и получили третий Accepted.
После этого мне рассказали, что писать по задаче E(Kidnapping). На нее ушло еще около 10 минут.
К этому времени довольно много команд сдали J. Во время контеста мы не придумали доказательства корректности нашей идеи с тернарным поиском и я начал ее писать просто потому, что по другим задачам идей толком еще не было и казалось, что раз так много народу ее уже сдали, то наша идея скорее всего верна, ибо на поверхности и не так сложна (особенно для топ-10-15 региона, которые уж наверняка знают, что такое тернарный поиск). Написал, запустили, ответ не как в семпле. Проверили вручную - оказалось, что тоже корректный ответ. Отправили. Accepted.
Следующей по сложности задачей была D(Fire in the Country). К этому моменту (примерно через два часа после начала) у меня дала о себе знать некоторая усталость, в идее построения выигрышных/проигрышных позиций не хватало одного отсечения, в результате чего сложность вырастала до кубической и мы получили TLE40. Затем добавили отсечение, немного поковыряли мой код нахождения времени, за какое огонь доберется до каждой из вершин, получили WA6, немного поругали меня за то, что не начал сразу писать bfs, я написал bfs и получили шестой Accepted.
Осталось два часа и варианты - решать G(Revolutionary Roads) или H("North-East"). По поводу других задач зачтенных попыток не было даже у звездных составов NNSU и Saratov SU#2, так что для нас другие задачи, очевидно, не представляли особого интереса.
Примерно полчаса мы пытались разобрать G на составные части, я попутно написал выделение сильно связанных компонент (полагали, что это потребуется). Потом у меня возникло озарение, как правильно использовать дерево отрезков в H и я бросился писать, а Артем следить. До конца контеста остался примерно час, на замороженном мониторе мы были на 8 месте, у нас было решение почти такое же, как и рассказанное на разборе М. Мирзаяновым, однако не настолько четко сформулированное и, в результате код иногда приходилось додумывать на лету, из-за чего были баги, на отладку которых и ушел остаток часа. В процессе отладки пару-тройку раз из-за Stack Overflow Exceptionов зависал на пару минут Eclipse, что меня невероятно выводило из себя (за десять-то минут до конца контеста!). Eclipse перезапустили, это не помогло, в итоге что-то отладили, заставили работать на первом семпле, отправили, естественно получили WA#2, дальше еще несколько исправлений, неправильные ответы на семплах, еще исправления, вчитывание (все это за 5 минут до конца). В итоге в финальном ранклисте у нас так же 6 задач.
По дороге с контеста в гостинку рассуждали, что обычно под фризом сдают не так и много, делали ставки на то, выбьют ли нас из десятки итд. Но этого не случилось, никто снизу нас не обогнал (впрочем, более или менее реальные шансы на это имели лишь Samara SAU #2 и Saratov SU #6) и мы впервые, с третьей попытки, прошли в полуфинал.
  • Проголосовать: нравится
  • +2
  • Проголосовать: не нравится

14 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
Забыл я про дождик в своем рассказе написать. Получается, что не мы одни такие психи, что кодили ховеркрафт босиком  :)
14 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
Мои поздравления, наконец-то затащили! Молодцы! :))
  • 14 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится

    Присоединяюсь к поздравлениям!

    молодцы ) удачи в Питере!


14 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
По мне так тоже библиотека гораздо удобней. И места просторней, и с точки зрения транспорта гораздо лучше.
  • 14 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
    Полностью согласен.
    Как я добирался на CGC-вообще атас. Сначала я поставил 2 будильника, оба проспал. Вскочил, побежал в универ, прямо перед носом ушел трамвай. Ждал следующего под навесом, и в какой-то момент вода просочилась под куртку. На Сенном сказали что трамвай дальше пойдет по Кутякова(а я в 12-шке писал),выбежал, начал ждать 90-го, 6-ку, 53, короче, все что идет туда. Подходит через 5 минут(время 8-25) битком набитая 6-ка, еле еле влезаю. Доезжаю до пересечения Кутякова-Астраханская(от Сенного 250 метров, от библиотеки метров 500-жителям других городов), жесткая пробень. Думаю, "ну все, п..ец, вломят мне однокомандники по самое нехочу". Выезжаю на Московскую-тут автобус слава богам программирования полетел. В 8-40 выхожу на Белоглинской, захожу в гардероб, раздеваюсь-футболка мокрая. Продрогший, поднимаюсь на 4 этаж, там стоит только один мой однокомандник плюс два человека с других саратовских команд, остальные не доехали. Прямо уже во время CGC, только зашли в аудиторию, зазвонил телефон. Но еще на рабочие места не расселись, слава Убунту, Мещеряков нас простил. Вваливается наш номер 3 и говорит "в Заводском вообще потоп". Короче весело
    • 14 лет назад, # ^ |
        Проголосовать: нравится +1 Проголосовать: не нравится
      Дальше было еще интереснее. За день до CGC мы приготовили кучу всевозможных стратегий, в скайпе созвонились, там договорились почти обо всем что только можно было написать, как будет уворачиваться, как нужно стрелять наперед и тд. Но это писать с самого начала было сложно, поэтому решили сначала написать простое палево, гоняется за призами, как только становится 5 штук-пуляется. Послали, выигрывали у всех кроме бота Samara SAU#1, он назывался HDQD или как-то так. Ну делать нечего, решили улучшать. Но что-то не то мы начали улучшать, короче, наш первый бот начал второго рвать на лоскуты. Два часа писали какое-то еще большее палево, а первое палево не сохранили. Еле-еле на 3 часу вспомнили, что мы писали, 20 строк кода-и начал ездить в те же очки как и раньше. Тут уж решили ничего глобально не улучшать, от греха что называется. Послали на тесты-не то чтобы сильно, но начали проигрывать соперникам. Тут Никита заметил: "сосулька летит быстрее, ее можно с большей дистанции пулять!", переписали, рассчитали опытным путем угол, потом еще добавили чтобы пулял не только по тому боту за которым гоняется но и за теми кто просто мимо пролетает. Послали, 6 раз проверили-6 раз выиграли. 
      Финал был эпичным. В первом раунде первого круга встретились мы и greatkirpich, те которые в итоге стали 3-ми. У них было 120 очков, у нас 108. В итоге после первого раунда мы были 17-ми. Второй раунд. Нас буквально с самого начала заморозили, набрали только 51 очко откатившись на 41 место. И в третьем раунде наш танчик втащил, набрав 150, в результате прошли с 13 результатом.
      Второй круг. Первый раунд-и наш бот набирает 132, и мы идем 5-ми в таблице. Дальше история повторяется-заморозившись на половину второго раунда, набираем 49 очков. Третий раунд опять повторяется-139, и финишируем 9-ми.
      Все это сопровождалось криками "ну не совсем палево все-таки!" Но все-таки этот раунд показал, что выигрывают зачастую отнюдь не самые сильные программисты(не SSU2 и не NSU1; что же касается Saratov State University, то мы почему-то лучшие его представители), так и то что очень большое значение сыграл рандом(позади нас оказались более хорошие боты и впереди нас-несколько более плохих)
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        очень жизненно и эмоционально, респект =)

      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Рандомное появление бонусов в CGC решает все. Можно круговой турнир 1 на 1 делать, тогда результат будет намного более объективным. Но показывать придется далеко не все бои - это минус...
        А еще странно, что бонусов в некоторых играх было чуть ли не в два раза меньше, чем в других, во всяком случае, на глаз так показалось.

        Умение решать олимпиадные задачи почти не коррелирует с умением написать хорошего бота. Там больше нужны хорошие математические скиллы, чтобы рассчитывать движение.

        Да, бота нашего звали не HDQD, а IDDQD, мы думали: а вдруг чит сработает? Но сработал другой чит :)
        • 14 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Точно))) Блин, откуда такая аббревиатура? Язык сломаешь).
          Я за вами толком не следил, тем более что в основном раунде мы ни разу не пересеклись. Вы где-то рядом с нами итого финишировали. Так что же вы такого написали, да еще так быстро?
          • 14 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Это из первого DOOM код  (кажется) на бессмертие =)
          • 14 лет назад, # ^ |
            Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
            Мы всегда стрельбу сначала пишем. А по истечении часа у нас была всего лишь стрельба + Go To Nearest Bonus.

            Кстати, никто не может выложить качественное видео с Gode Game? Хочу все раунды и награждение.
            • 14 лет назад, # ^ |
              Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится
              У меня есть 50-минутное видео, но оно обрывается на середине второго раунда. Плюс к тому же не лучшее качество. Куда выложить?
              • 14 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                На YouTube лучше всего, но там ограничение по продолжительности, поэтому надо разбить видео на несколько частей.
                Или залить куда-нибудь еще, например, на RuTube и/или в контактик.

                2 и 3 раунды я снимал, и вроде даже видно, что происходит (ссылки в теме про Samara SAU).

                Осталось награждение... Неужели никто не снимал?
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

поздравляю!

хороший был контест в Саратове: достаточно сбалансированный и интересный, авторы молодцы

  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Ага) Только что-то на контесте мы тупили).
    Реально было 8 халявок на контесте, ни больше ни меньше. Ну, учитывая наш малый опыт, можно было не решить Н про точки(и то я почти сразу после контеста придумал решение за n*ln^3, учитывая слабые ограничения это прошло бы), задачи же G,C,D было стыдно не решить, однако мы-молодцы, мы умудрились это сделать:). Вернее я молодец, потому что я запорол D и не сумел додумать нормальных масочек на C, пока моя команда писала палевную жадность, которая падала на 20-м тесте. Еще я молодец что не умею читать по английски... Словом, молодец я...
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      твой комментарий поймут правильно только те, кто был на самом контесте ;-)

      а всё по той простой причине, что на acm.sgu.ru порядок задач был совершенно иным: C - fire in the country, D - north-east, G - buoys :D

      а читать по-английски много кто не умеет ;)

      • 14 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
        Если сравнивать с acm.sgu.ru, то D=С,H=D,G=H,C=J(первыми даны задачи с контеста, вторыми-с сайта)