Всем привет!
Уже в эту субботу состоится второй квалификационный раунд Russian Code Cup. На этот раз раунд будет в первой половине дня — он состоится 25 апреля в 12:00 по Москве. Раунд продлится 2 часа. По итогам раунда 200 лучших выйдут в отборочный раунд, где сразятся за выход в финал.
Те, кто после второго квалификационного раунда все еще не пройдут в отборочный раунд, смогут попробовать свои силы в третьем квалификационном раунде 31 мая в 13:00. В отборочный раунд, назначенный на 13:00 14 июня, пройдут 200 лучших участников из каждого квалификационного раунда.
Для того чтобы принять участие в Russian Code Cup, нужно зарегистрироваться на сайте http://russiancodecup.ru/ (регистрация будет открыта до начала третьего квалификационного раунда).
Подробнее о чемпионате, правилах и призах и читайте на сайте http://russiancodecup.ru, по всем вопросам обращайтесь на russiancodecup@corp.mail.ru
Приглашаем всех принять участие в квалификационном раунде Russian Code Cup и желаем всем удачи!
А почему так рано?! У многих сильных студентов в это время пары. Я думаю лучше на вечер перенести.
У многих сильных студентов Чемпионат Урала :)
Да! И еще чемпионат Урала. Короче самое неудобное время.
А можно участвовать неофициально, даже если прошел в отборочный тур?
Пока такой функционал не реализован на сайте RCC
Печально :(
Где можно сдать задачу?
У меня такая же проблема, кажется, что если зарегистрироваться после начала тура, то в нём нельзя участвовать.
Вчера нажал кнопку зарегистрироваться ((
Объясните кто-нибудь пожалуйста пример из задачи B. Как там получается 5.5, а не 5.0?
(1,1) -> (2,1) -> (3,1) => 5 * 0,25
(1,1) -> (2,1) -> (3,2) => 5 * 0,25
(1,1) -> (2,2) -> (3,2) => 6 * 0,50
В сумме 5,5
Как-то таблица результатов очень медленно обновляется.
А я вот залогиниться не могу. Но кнопку регистрации я нажимал ой-как-давно. Факт аутентификации теряется где-то между сайтом кубка и сайтом, кхм, "центральной системой регистрации" (кстати, зачем она вообще была нужна).
Логиниться я правда начал где-то через полчаса после начала, my bad. Но это же не повод меня совсем не пускать:(
Платформа codeforces действительно одна из лучших, если не самая лучшая. Но к желанию mail.ru проводить контесты на своей площадке я отношусь спокойно (google и yandex проводят же). Все было бы хорошо, если бы не этот ГИГАНТСКИЙ шрифт. Они считают программистов по умолчанию слепыми? Уменьшить масштаб не вариант, ибо при нормальном размере текста задач остальное становится слишком мелким и сбоку огромные пустые полосы. Смилуйтесь, если не хотите менять дизайн — сделайте условия в pdf на olymp.sty! С остальным сможно смириться, но не с необходимостью постоянно прокручивать и читать одно слово на весь экран.
кстати для парсинга условий написал питон-скрипт
для его работы нужно только менять айдишник раунда, сами знаете где его взять :)
еще можно сохранять страницу с условием задачи локально и открывать (главное удалить папочку, оставить только html-файл). но да, это костыли...
+1 весь этот дизайн сайта похож на типичный дешевый понт в исполнении mail.ru. Вместо дизайна лучше бы прочекали проблемы с GNU C++.
Думаю, этим занимаются в лучшем случае знакомые друг с другом люди.
Ну я как раз говорю о том, что можно было оставить старый дизайн при этом не нанимая дизайнеров, а вместо этого почекать все остальное.
А чего удалили? Интересно же, что заплюсовали. Или было много-много мата на дизайн сайта, судя по ответу?
Было всего один мат и предложение ставить плюс, если не понимаете, почему контест на базе своей площадки с таким <мынщибеу< интерфейсом, а не на базе CF.
Интересно, почему сила плюсомета не угасает даже с УДАЛЕНИЕМ комментария?
Мой код, получивший WA1 на их сайте, зашел в тренировке с первой попытки. ¯_(ツ)_/¯
Выводить long double cout'ом — не очень хорошая идея
Почему? Это какой-то особенный тип?
Честно говоря, удивляет подход жюри, что здесь, что на NEERC. Еще в 2013-м году на NEERC участники напоролись на неадекватное поведение ввода-вывода вокруг long double. Прошел год, и на NEERC 2014 было опять то же самое — те же вопросы от участников, те же ответы жюри "да, не работает, выкручивайтесь". Хотя уже очень давно есть нормальные сборки mingw, на которых эта проблема не воспроизводится. Это же надо умудриться выбрать проблемную сборку и именно ей пользоваться (как минимум) полтора года? А ведь g++ это, наверное, самый популярный компилятор на контестах. Оба года на NEERC я подходил к Георгию Корнееву и обращал внимание на эту проблему с g++.
На RCC ситуация усугубляется отсутствием в разделе правил точной версии (и даже платформы) используемых компиляторов http://www.russiancodecup.ru/rules/, отсутствием пробного тура, отсутствием функциональности типа <<запуск>> на Codeforces. Ну даже просто броадкаст от жюри со словами: "будьте аккуратны с выводом long double, рекомендуем ..." сильно улучшил бы ситуацию. А ведь еще, наверное, за WA/PE 1 штраф начисляется.
ИМХО, очень такой расклад не participant-frendly и, что огорчает, тянется уже довольно долго.
Чуть более точно: это сборка с названием наиболее похожим на "mingw", первая ссылка в гугле и тому подобное. Скажем, пока мне внезапно не захотелось 64-битный gcc на Windows пару месяцев назад, я даже и не подозревал, что бывают и другие сборки. MinGW и MinGW.
Почему же, всё есть: GNU C/C++/C++11 MinGW 4.8.1. Это очень точно характеризует версию, мне кажется. Есть ровно одна сборка с названием "mingw", остальные называются по-другому: tdm-gcc, win-builds, mingw-builds...
Как решать задачу B? Какая там динамика?
Я делал рекурсию с мемоизацией. Логика простейшая:
Я как-то то же самое сделал но у меня WA. Кто нибудь скажет почему. Вот код
Возможно, я понимаю, почему так (но тогда ума не приложу, как решать задачу). Генератор:
if (a[i][j * 2 — 1] == a[i][j * 2]) А даблы так хорошо сравнивать?
a[i][j * 2 — 1] и a[i][j * 2] даблы но в них хранятся инт. Обидное то, что то же самое решение что получил WA во время соревнования, прошло все тесты в разделе тренировки CF.
Довольно простая, храним два массива prob[][], expected[][] — вероятность и мат. ожидание в какой то клетке.
Код.
Underflow не получается при n = 1000? У меня было вроде бы работающее решение, которое на сервере выдавало Presentation Error. Я спросил у администрации — как так, даже если решение неправильное, я в любом случае вывожу t чисел. Получил ответ — ваша программа выдает строку, которая не является вещественным числом.
Я загрузился. Единственное объяснение, которое придумал — что-нибудь не так с арифметикой и где-то я получаю NaN или ещё какую-нибудь гадость. Начал думать, как всё это сделать в целых числах или в логарифмах. Так и не придумал.
писали на питоне? Скорее всего там выводилось что-то типа "1.2345e-67", и достаточно было воспользоваться функцией format:
"{:.7f}".format(1.2345e-67)
Спасибо за помощь — нет, это был C++ и выводился через
cout << fixed << setprecision(6) << value << "\n";
Но чисто для справки — 1.2345e-67 это абсолютно нормальное вещественное число. Если бы оно вызвало ошибку я бы уже жаловался администрации.
Тем не менее,
NAN
и всякие другие интересные значения вещественных типов выводятся — по мнению стандартных чекеров — не как числа. Пример:Вывод:
-1.#QNAN00000
.NAN'ы согласен -на то они и NAN, Not A Number. А вот 1e-3 и 0.001 чекер должен воспринимать одинаково. Хотя никогда не пробовал, как это воспринимает чекер на Codeforces. Надо попробовать.
Я так и не понял, в чём была проблема — так как код я дописывал в ходе контеста, у меня нет точной копии того, что я отправил. Может быть была на самом деле ошибка исполнения и вердикт Presentation Error был не совсем правилен.
Вероятно, я не в тему ответил, и дело в другом. Но чёткое описание проблемы я не нашёл ни здесь, ни в треде NEERC 2013.
Для каждой комнаты динамикой считаем вероятность туда попасть и для каждого коридора, выходящего из этой комнаты, плюсуем к ответу его <длину> * <вероятность попасть в комнату, откуда выходим> * <вероятность пойти по этому корридору (0, 0.5 или 1)>
Я научился в Д считать первую степень всех чисел, а как надо было для произвольных степеней решать?
Для первой степени оказывается не очень интересно
1) Смотрим, что 10^9 + 23 = 3 * 121 * 61 * 45161.
2) Для каждого из этих множителей находим период Пизано (период последовательности Фибоначчи по этому модулю). Считаем частичные суммы нужных нам степеней по этому модулю, а также сумму на всем периоде. По этим величинам нетрудно найти нужное нам значение по рассматриваемому множителю.
3) Зная значение интересующей нашей величины по взаимно простым модулям, можно найти значение по модулю их произведения, используя китайскую теорему об остатках.
Ну вот, по модулю 45161 я период не нашел (видимо где-то баг в коде) и ушел размышлять в другом направлении... Зато теперь я знаю, что эта штука называется период Пизано и для модуля m этот период всегда не больше 6m.
Модуль составной, 45161 * 22143 (22143 тоже составное но не важно). Можно решить по каждому модулю отдельно и потом китайской теоремой об остатках соединить. По первому модулю последовательность ФФиббонначчи зацикливается после 45160 элементов, по второму вообще после 1320. Можно эти ~50000 предпосчитать и потом возвести все в степень К. Потому считаем сумму всех нужное число раз и ещё раз проходим чтобы посчитать сумму оставшегося куска.
У меня с быстрым возведением в степень в long long не зашло (вообще достаточно int'а). Я ещё делал K %= phi(mod) но тут можно напороться на то, что если K = t * phi(mod) то не сработает для чисел, не взаимнопростых с mod, очень долго отлавливал этот кейс.
(пример фейла: 6 = pow(3, 8, 15) ≠ pow(3, 0, 15) = 1. Тут phi(15) = 8.
Если представить число 109 + 23 в виде 3 * 121 * 61 * 45161, то фейл может случиться в двух случаях:
1) Основание степени равно нулю
2) Модулю, по которому мы ищем степень, равен 121. Здесь для x = 11q получаем: xk ≡ 0, k ≥ 2
А как решать задачу C?
У меня зашел бинпоиск. Зная радиус, проходимся по массиву и пытаемся жадно лезть к краю окружности, и проверям, что каждая палка влезает.
Не знаешь, почему такая логика не срабатывает:
Первую планка ограничивает минимальный радиус — меньше уже не получится. Каждую следующую мы укладываем как хорду (в пределах от 0 до 2R это можно сделать), таким образом наш конец последовательности всегда на окружности. Если натыкаемся на что-то больше 2R, то приходится увеличивать радиус до этой планки / 2 и продолжаем дальше.
Вот это проходится? Ответы 5 и 5.5
По-моему 4.5. Пошёл перечитывать условие.
UPD: Понял, спасибо!
У меня зашел какой то треш: http://pastebin.com/uv9DFf2J. Я использовал соображения, что либо ответ это максимальная палка делить на 2, либо есть какая-то палка, которую мы не успеем сделать диаметром, т.к. палки впереди нее не достают в сумме до окружности.
Той частью, где треш ты, видимо, обрабатываешь случай с длинной первой палкой.) А все остальное нормально.
В любом случае радиус будет не меньше первого отрезка. Дальше идем по всем палкам и стараемся самую длинную положить на диаметр. Она кладется, когда сумма всех предыдущих ей палок больше половины ее длинны. А все последующие палки будем укладывать так, чтобы обе точки лежали на окружности. Тогда на каждом ходу мы сможем положить палку, не меньшую текущего радиуса.
Радиус не может быть меньше, чем:
длина первой палочки;
половина длины какой-либо палочки кроме первой;
длина какой-то палочки минус сумма длин предыдущих палочек.
1 и 2 — очевидно почему, 3 — нам нужно чтобы самая большая палочка стала диаметров окружности, а для этого нам нужно успеть прийти к этой окружности от центра.
Как решать D? Я разложил модуль на степени простых: 3, 61, 121, 45161, решил для каждого модуля в отдельности (по каждому множителю модуля там возникает период размером с этот множитель, и поэтому можно искать степени не до n, а до периода, а потом домножить на нужное число), потом скомбинировал ответы, и вот это получает TL.
У меня пара оптимизаций для возведения в степень помогла. (На intах вместо long long, и K %= phi(mod)).
Да, пожалуй, с этим все зайдет, я на 1:59:47 просто семплы прошел, оптимизить было некуда. Но все-таки неприятно когда такие оптимизации нужны, можно было бы сделать ограничения поменьше, и неверные решения все равно бы не заходили.
Неплохо было бы добавить просмотр кода своих посылок.
Соревнование в Тренировках: 2015 Russian Code Cup (RCC 15), 2-й квалификационный раунд.
А почему не выводятся тесты на которых валится сабмит? Они же все равно публичные, зачем прятать. А так легче дебажить было бы.
TL по D бы уменьшить... моё решение получало TL на RCC, здесь заходит за 2.2. Я бы поставил 2 секунды.
Забавно получилось. Пишу на С++ -- получаю ВА1. Переписываю на джаве -- получаю АС. И так с двумя задачами (вторая и третья).
В тренировку зашёл тот же самый код на С++ по обеим.
Тоже получал на контесте только WA1 на GNU C++ по A, B и C.
В тренировке те же, судя по времени редактирования, решения получают WA1 по A, (хотя локально ответы на выложенных тестах совпадают), TL10 по B и AC по С.
Написал в форму обратной связи.
Тоже проблема с вердиктами. WA1 по B на контесте, TL11 на тренировке. Нехорошо это, Особенно если учесть, что стандартные ускоряющие исправления: «cin на scanf» и «вектор на массив» запихивают задачу (на тренировке).
У меня одинаковий код для B на контесте выдавал WA6, а здесь получает AC. Как так?
TL10 на сервере Russian Code Cup и TL11 на Codeforses по B потому что:
работает дольше, чем
Кстати, а у меня у одного в период где-то с 40.00 до 55.00 не засылались решения? Попробовал написать вопрос жюри, а вопросы тоже не отсылались)
У меня один и тот же код по задачам B и C получал WA1 на GNU C++ и Accepted на Visual C++. Может проблема в long double?
Под наиболее дефолтной сборкой MinGW под винду вывод long double не работает никак вообще. Ни cout, ни printf("%lf") ни printf(не-знаю-что-еще). Потому что оно использует printf из вижаковской libmsvcrt, а там long double нет по каким-то очевидным причинам.
Просьба к организаторам добавить возможность просматривать/загружать посабмиченные во время соревнования решения, я такого не нашел.