19 мая 2013

VIII открытый чемпионат ИГЭУ по программированию.

Вчера я вернулся в Вологду с очередного чемпионата ИГЭУ. Небольшой отчёт о поездке под катом

С 16 по 18 мая в Ивановском Государственном Энергетическом Университете проходил VIII открытый (то есть участие могли принимать не только студенты данного университета, и даже школьники) чемпионат по программированию.

Как только мне переслали официальное приглашение, я поинтересовался - а можно ли на
соревнование захватить свою клавиатуру (уж больно я к ней привык). На наш запрос организаторы ответили, что "нет, все участники должны работать на однотипных устройствах" O_o. Хорошое начало, однако. Затевать беседу об "однотипности" я не стал...

Отбор на чемпионат проходил в университете через выполнение норматива по решению задач. В итоге, на олимпиаду поехал я и Егор Стрешнев.

Как всегда насущным вопросом было - где мы будем жить в Иваново. В этом году мы решили изменить стандартному выбору (гостиница "Иваново") на гостиницу "Турист". Мы посчитали, что можем себе позволить взять 3 отдельных номера + завтрак в гостинице + халявный интернет. Гостиница располагается в центре города, недалеко от весьма крупного ТРЦ "Серебряный город", где мы каждый год появляемся :-)
Вышло примерно по 5k с человека за 3 ночи.

Поездка началась с автобуса Вологда-Иваново. До Данилова мы добрались обсуждая записи презентаций сообщества jug.ru и конференции JPoint 2013. Performance-инженеры из Оracle в очень живой форме рассказали о том как надо и как не надо делать микробенчмарки Java-кода, про то - какие интересные баги они вылавливали в многопоточке Java, как надо решать проблемы производительности приложений на Java, и как зная принципы работы JVM на конкретных архитектурах процессоров выжимать максимум производительности. Все данные доклады я крайне рекомендую увидеть тем, кто серьёзно интересуется вопросами производительности Java. Фёдор Меньшиков поделился своим первым опытом программирования под Android. В конце разговор скатился в область грамотного написания многопоточных программ, книжку по которому я сейчас читаю ("Java сoncurrency in practice").
Когда все насущные вопросы мы обсудили - каждый решил уединиться. Кто-то пытался спать, кто-то смотреть фильм, кто-то слушал музыку. Но в районе Данилова нашему расслабону пришёл конец - у автобуса была обнаружена неполадка. Водитель начал очень часто останавливаться и бегать вокруг автобуса. После часа такого экшена вроде было даже озвучено, что за нами уже выслали новый автобус и его придётся ждать пару часов. Но чудеса случаются - автобус всё-таки смог дотянуть до Ярославля, где нас уже ждали для экстренной пересадки на другой автобус. Погода в среду стояла жаркая, кондиционер в новом автобусе несмотря на повышенную шумность весьма слабовато охлаждал автобус. Когда мы подъезжали к Иваново вдруг началась серия дождей и уже было не понятно что хуже - выносить жару или промокнуть под дождём. Общим голосованием было решено добираться в гостиницу на такси. Местные бомбилы не слабо заламывают цену, так что лучше такси вызывать, обойдётся на 100-200р дешевле. Пока ехали в такси я решил проверить работоспособность GPS и Яндекс карт. В целом, они отработали нормально и это дало уверенность, что мы не потеряемся в городе :-)

Номера в гостинице совпали с ожиданиями и фото на сайте, но отсутствие кондиционера и неполадки в смесителях немного подпортили проживание. Видимо, пора уже завязывать отождествлять заявленный wifi в гостиницах с тем что ты ожидаешь - что приём будет уверенный в номерах и всё будет работать. У меня получилось к нему подключиться только на 2ой день и то пришлось выходить в коридор гостиницы. Когда уже администраторы гостиниц поймут, что нельзя просто поставить один роутер на этаж и надеяться, что этого будет достаточно.

После размещения (а это было около 20.00 вечера) в гостинице мы отправились ужинать в ТРЦ. За год там особо ничего не поменялось, как всегда каждый мог найти себе еду по вкусу. Чуть позже в нём мы нашли и магазинчик Baskin-Robbins, где можно было отведать известный бренд. На 1ом этаже ТРЦ располагается гипермаркет, который поражал не только своей площадью, но и очередями у касс. Каждый день мы в нём закупались и каждый день стояли в очереди по 10-15 минут :-( По приходу в гостиницу я предложил распланировать следующий день. Открытие чемпионата было в 14 часов и хотелось бы чем-то заполнить кучу времени до него. Выбор пал на поход в тот же ТРЦ в кинотеатр на "Стартрек: Возмездние". Идти мы собирались в 11 часов и ожидалось, что хоть и день премьеры, но в это время народу будет не много. После этого мы разбрелись по своим комнатам. Интернета у меня не было и я решил в кои то веки посмотреть телевизор. Нашёл известный канал Наука 2.0 и смотрел его пока не начал засыпать.

На следующий день позавтракав, мы отправились в кинотеатр. Не знаю каким образом, но нам за 120р дали билеты на сеанс с 3D. Дежурная бабушка на входе в зал прифигела от такого расклада и не хотела нас пускать. Видимо, не мы одни купили такие "весёлые билеты" (оказалось, что кассир была "новенькая") и в итоге нам всё-таки организовали сеанс 3D за такую смешную сумму да ещё и в день премьеры. В рекламе до фильма были эпичные трейлеры фильмов "RED 2", "Война миров Z","Иллюзия обмана". На каждый из них мне непременно захотелось сходить :-) Спойлерить по поводу самого Стартрека не буду, но скажу, что фильм вполне в духе первой части и его было весьма интересно смотреть.

После сеанса мы пошли на открытие чемпионата. Ничего особо интересного. После этого был пробный тур, на котором Егор занял 1ое место, а я - последнее :-)
В самом чемпионате было заявлено около 36 участников, среди которых были студенты 4ёх университетов, одна академия и много школьников. По моим подсчётам на контесте было 4 моих реальных соперника. Но план-минимум состоял в том, чтобы войти в Top 3 :-).

После пробного тура мы отправились в пиццерию, где пообедали всем что смогли съесть :-)
Ну и какая поездка в Иваново без традиционной пешей экскурсии по городу. После плотного обеда да и в жаркую погоду я всячески пытался отговорить от данной затеи, но мы всё-равно отправились в прогулку по улицам города, параллельно слушая рассказы об истории некоторых зданий, улиц и памятников. В гостиницу я пришёл еле живой. И это за день до основного тура!
Хорошо, что запасы питьевой воды и вечерняя прохлада смогли привести меня в чувство.

В день основного тура мы спокойно добрались на троллейбусе до здания университета, встретили участников из Рыбинска и Коврова. Начался тур. И вот тут начались "сюрпризы". День назад организаторы нас уверяли, что контест будет простой, т.к. падает средний уровень участников и много школьников. Но первая же халявная задача С на поиск количества компонент связаности в графе дала всем лидерам по нескольким "брёвнам". Причина была в том, что размер графа был порядка 10^6 и стандартный поиск в глубину не втискивался в ограничение 64 мбайт. На Java стандартный размер стека около 1 мбайта и очень глубокая рекурсия вылетает с ошибкой Stack Overflow. Для обхода этой неприятности я добавил создание потока на почти 64 мбайта и проверил, что в худшем случае его вроде должно хватать. Я стал получать вердикт WA 29. Проведя серию опытов локально, я решил, что на самом деле потоку и 64 мбайт может не хватать и мой поток просто тихо дохнет с тем же исключением, но проверяющая система это исключение не регистрирует. В итоге, получив 3 бревна я решил переписать всё на поиск в ширину и оно успешно прошло все тесты. Отличное начало, ничего не сказать :-)
Дальше зашли ещё 2 халявки. После сдачи 3ей задачи я даже оказался на первом месте. Но вскоре меня обогнал будущий победитель - он решил задачу на геометрию и тернарный поиск (E). Я сразу же переключил своё внимание на неё. Геометрии там оказалось совсем немного, а формулу для объёма конуса от куда-то вытащило подсознание :-). В результате, на 4ом часу соревнования я занял 2ое место и началась финишная прямая. Я долго и упорно пытался написать "технический гроб" контеста - задачу в которой требовалось реализовать проверку на совпадения регулярного выражения из букв и символов *  со строкой. Мне казалось, что я это было вполне по силам - решение постепенно совершенствовалось, я накопил около 10 тестов для проверки, но довести до конца его так и не успел. Так же я понял, что в задаче A надо найти гамильтонов цикл но был без понятия как это сделать :-( У задачи B было красивое техническое решение, но до него можно было дойти, если долго и упорно рисовать решения задачи для разных размерностей.

В конце контеста я оценил возможные сценарии во время заморозки и стало понятно, что выпихнуть меня с 2ого места можно только если кто-то сдал 5 задач. Но таковых не оказалось.
На закрытии был проведён разбор задач. Разморозки результатов не было - просто начали с первого места выдавать дипломы и подарки. В этом году фонд соревнования видимо подрос - была и компьютерная переферия и книжки. Так же были спонсоры, которые для Top 3 организовали дополнительные подарки. Мне от них досталась эргономичная клава "Natural Ergonomic 4000", а от организаторов я выбрал себе приз - беспроводную компактную управляемую аудио систему ну и диплом вице-чемпиона чемпионата :-)
От 1ого места я отстал на 10 штрафных минут. Не сделай я столько глупых попыток по первой задаче и всё было-бы совсем иначе, но и этот результат меня вполне устроил.

После закрытия мы отправились в McDonalds, где поужинали и закупились в обратную дорогу.

Вот таким мне запомнился видимо последний мой чемпионат ИГЭУ.
Результат вполне достойный для "старичка" :-)
Олимпиадный год на этом закончился. Прошёл он на редкость успешно, что хоть как-то успокоило моё "олимпиадное эго", истерзанное за эти 5 лет. Что дальше делать с олимпиадами пока не знаю. Сейчас планирую доразобраться в многопоточке Java.

Комментариев нет:

Отправить комментарий