Всем привет!
Напоминаю, что 3 апреля в 12:00 начнется квалификационный раунд Открытого чемпионата Москвы и МО по программированию (КРОК).
Чтобы пройти в Раунд 1 вам надо принять участие в квалификации. Из квалификационного раунда в Раунд 1 проходят все участники, набравшие не меньше баллов, чем участник на 1000-ом месте (при условии положительного числа набранных баллов). В раунде вас ждут несколько несложных задач, примерно расположенных по возрастанию сложности. Во время квалификации задачи тестируются системой только на претестах, а системное тестирование состоится после окончания квалификации (которая идет сутки). Претесты не покрывают все возможные случаи входных данных, так что тщательно тестируйте свои программы! Взломов, падения стоимости задач во время квалификации нет.
Раунд продлится 24 часа, но это не значит, что мы призываем вас все это время провести за решением задач. Мы надеемся, что большинство участников справятся с задачами (или с большинством задач) за более короткий срок. Такая длительность раунда выбрана для того, чтобы каждый нашел удобное время для участия.
До окончания раунда категорически запрещается публиковать где-либо условия задач/решения/какие-либо мысли и соображения о них. Запрещено общаться на тему задач, обсуждать условия и проч. Будьте честными и пусть в Раунд 1 пройдут сильнейшие. Когда квалификация будет завершена, можно будет обсуждать задачи и решения.
Зарегистрироваться на раунд можно в любое время вплоть до его окончания. Результаты раунда не будут влиять на рейтинг, внеконкурсное участие в раунде не разрешается. Впрочем, все задачи попадут в архив после окончания раунда.
Желаем удачи и удовольствия от решения задач!
UPD: Соревнование закончено! Спасибо за участие. В скором времени будут удалены нарушители порядка и результаты станут официальными. Неофициально — проходной балл в Раунд 1 составляет 1950 баллов.
UPD 2: Из таблицы результатов были удалены явные читеры и люди, кому не исполнилось 18 лет на момент регистрации. Если ваши результаты были удалены по ошибке, свяжитесь со мной для прояснения ситуации. Теперь проходной балл составляет 1900 баллов.
Вторая часть текста чуть более чем полностью совпадает с анонсом аналогичного раунда VK cup :)
Тут главное, чтобы задачи не совпали. А анонс — дело наживное: на ТопКодере каждый год правила копируют из прошлого года, а потом еще месяц вылавливают баги и морально устаревшие фрагменты.
И -50 за пересабмит, все так же? Надо быть осторожным, а то попытка одна и можно не попасть в 1000.
Да, будьте внимательны и осторожны. Конечно, лучше решить с запасом (т.е. все), чтобы спать спокойно.
I am getting a message like 'Only Championship registered users are allowed to participate in this round'..
To participate in the championship, you must register on http://www.crocok.ru/championship/ (in Russian) before April 4, 2012.
Will the contest be unrated?
The results of the round will not affect the rating
And it is very-very bad style to change the sense of your comment completely.
And it is very-very bad style to steal ideas of other people :) http://codeforces.net/blog/entry/4262#comment-86537
I'm sorry about my comment, I didn't read clearly the article :(
Sir, What should I do to register in the Championship,please?I register in the contest in http://codeforces.net/contests,but I failed.
http://codeforces.net/blog/entry/4262#comment-86516
rated?
Did you read the announcment?
The results of the round will not affect the rating
.Also, it is good idea to read previous comments: http://codeforces.net/blog/entry/4262#comment-86513
I’m sorry about my comment, I didn’t read clearly the article :(
And it is very-very bad style to change the sense of your comment completely.
Sorry, I just want to delete my foolish comment. I really beg you pardon.And I have changed it back already.
WTF???
Стоимость задач падает?
с 3 апреля!
Какая крутая шутка. Оценил.
Наверно еще и хакать можно. Займусь этим.
Уже нет, настройки контеста исправлены.
Не получается задать вопрос, говорит "Поле должно содержать не более 1,000 символов", хотя оно, очевидно, содержит меньше 1000 символов.
Учитываются символы HTML-разметки. Может дело в этом? Попробуйте посмотреть исходный код вопросы с помощью <>.
Ну, уже неактуально, но на будущее учту, спасибо.
"The Qualification Round has no hacks or decreasing values of the problems." But the value is decreasing...
Fixed, thank you
"The Qualification Round has no hacks or decreasing values of the problems." Somehow it is contradicted in the contest. I just got 960 for the first submission of A :)
Fixed, thanks
Hi, I registered at the site, but can't participate in the contest since registration is cloesd. Is this intended?
Fixed, thanks
"Contestants who gain a score equal to the 1000-th place finisher score or greater will advance to the Round 1 (also you need to gain positive score)"
If there are fewer than 1000 participants does that mean that as long as you get a positive score, you can proceed to the next round? =D
definitely, but there are already more than 1k competitors.
I might point out that up to now, the number of participates who have a non-zero score is strictly less than 1,000.
А то, что за не прохождение 1 претеста по причине WA не снимают баллы — это нормально?
Да, читайте правила.
Не дает посылать задачи и говорит: "Для просмотра страницы вы должны быть зарегистрированы на соревнование". Регистрация мной была проведена! Что нужно сделать?
Зарегистрируйтесь на соревнование (красная ссылка-кнопка зарегистрироваться со страницы соревнований).
Написал 4 задачи из поезда с пропадающей сетью на айфоне (да, мсье знает толк :) ). Обнаружил проблему — с сафари при попытке отправить решение лезет ошибка упс что то сломалось... Благо опера была, из нее все норм.
It seems that not so many people participate in this contest.
I think the number of participants is much bigger than the number of people who are actually willing to pay for their trip to Moscow for the finals in case they would advance :)
Отказаться от миллиона надо?
Все совпадения случайны.
От миллиона Перельман отказался, а тут ПерельманОВ. Это 2 разных человека :)
how to cancel our registration in croc? i didn't read the text carefully and didn't notice you must be at least 18 to participate. What shall I do?
why do you want to cancel registration ?
see the register list after the green “registration complete” and find your name in this list. there will be an 'x' beside your name. it seems that you can cancle your registration here. ( by the way, i dont try it:) )
why so much negative points?
to jehad: because the contest is not designed for me. to liuyubo : i've tried it before.
any how it's solved now. thanks for your answer.
как нормально решать D? сунул прекальк для чисел вида 10000к.
Я сдал в лоб два цикла. Первый — i, по квадратам натуральных чисел, второй — j, по всем числам, таким, что i*j<=a+n-1. Это вроде бы линия. (там ряд к pi^2/6 сходится)
http://e-maxx.ru/algo/prime_sieve_linear, за O( N * log N ), если количество делителей числа оценивать в log N.
Я писал динамику:
1) База:
d[i] = i
2) Идем по i от 2 до ,
d[i * i] = 1
, идем по j, пока i × i × j < = 107, релаксируем ответ:d[i * i * j] = min(d[i * i * j], d[i * i] * j)
Затем пробегаем по всем i от A до B, суммируем d[i].
найти квадраты, получить из них остальные:
находим суму от a до a + n, как уже написали выше )
Решение в лоб (каждое число раскладываем на простые множители, меньшие sqrt(a+n-1) и во время разложения строим ответ для этого числа), аккуратно реализованное на быстром языке не пройдет?
а что в "Запуске" на инпут 1 10000000?
Понятия не имею. На питоне такое точно отвалится по TL, а переписывать на чем-то другом уже не хотелось.
Я ожидал, что Вы напишите ТЛ, думаю что должно ТЛиться, т.к. у Вас будет 10^7 * (нечто C), где C будет больше 10 в среднем, а это скорее всего ТЛ
Слишком долго, не?
На Java 8.5 секунды ;)
Сначала для всех чисел заполним массив единицами. Потом пробегаем по каждому полному квадрату k2, и для каждого числа, которое делится на этот квадрат, обновляем его элемент t[i] до . В конце концов для каждого числа будет записан наибольший квадрат, на который оно делится.
N ln N?
Yes.
достаточно простое и красивое решение =)
Учитывая, что оно линейное) http://hijos.ru/2011/02/27/summa-ryada-obratnyx-kvadratov-basel-problem/ Тут как раз эта сумма. N*pi^2/6.
А как получить что решение линейное, опираясь на то, что ряд из обратных квадратов сходится? P.s. Мне казалось что из N чисел примерно sqrt(N) квадратов. Соответственно сложность О(sqrt(N)*N). Где я ошибаюсь?
Да, среди N чисел примерно sqrt(N) квадратов. Для каждого квадрата x выполнится N/x операций.
Спасибо! Понял. :)
откуда логарифм берется? Там же 1.6 * n в худшем случае
Нет, ряд обратных квадратов сходится к (Pi^2)/6, т.е. данное решение работает за O(N).
Thx! Went better than expected :)
fill(t, t + max_n + 1, 1); for (int i = 2; i * i <= max; ++i) for (int k = i * i, j = k; j <= max; j += i) t[j] = max(t[j], k);
Объявим массив на 107 элементов. Рассмотрим все такие i > 0, что i2 ≤ 107. Для каждого i найдём все кратные i2 числа x = k·i2, такие, что x ≤ 107, и в arr[x] запишем множитель k. Заметим, что если обходить i от наименьшего к наибольшему, то в конце в каждой ячейке массива будет кратный множитель наибольшего квадрата, делящего соответствующее число. Тогда ответ — это сумма чисел от arr[a] до arr[a + n - 1].
Задача Е: какой ответ на тест
?
3
А почему 3? Пронумеруем тэги от 1 до 6.
Мы ведь можем выбрать так:
Потому что на самом деле надо было найти не это :) Тэг хороший, если требуемая последовательность в нём заканчивается. Вот надо найти количество хороших тегов. В частности, ответ не превосходит числа всех тегов.
Я тоже долго тупил, потому что сначала понял задачу именно так, как ты. Но, во-первых такую задачу я могу решить только динамикой 200 * N. И ответ там может быть очень большим. Пример, цепочка из 10^5 одинаковых вершин. И запрос типа 200 a a a ... .
Аналогично... :D
Блин, вот печаль-то.
Тогда задача становится намного проще.
Причём при этом толковании условия можно пройти первые 4 претеста ^_^
А можешь написать те 3 последовательности, которые образуют ответ?
1 2 3
1 2 5
1 2 6
а почему
4 5 6
не подходит-то?Потому что 6 уже посчитали в 1 2 6.
Понятно, спасибо, пздц.
вроде 7
Я выше написал 6 вариантов, какой я пропустил?
1 5 6
А, точно, спасибо.
how did you solve problem E ???
Bruteforce of course!
Why had I negative votes? I think an O(NL) bruteforce is quick enough for this problem. I have tested a lot of data which I tried to make as large as I could, and none of it takes more than 1 second.
May be because it is not bruteforce actually?
Maybe for "I do not think there exist a better solution" part.
simplexml class + xpath method, 2 lines of code. lol (PHP)
.. and then time limit exceeded? lol
1469680 05:21:45 sander E — BHTML+BCSS PHP Runtime error on test 8 50 ms 10016 KB
I am afraid that you did not pass the system test.
what's up with system test?
When system testing is start??
что–то маленький проходной в этот раз вышел...
кандидатов тоже как бы...
может поднимут проходной) хотя бы до 1500
он 1950, не?
Почему не работают всплывающие окна с информацией о том на каком тесте упало, и прочей инфой?
Моя задача E не прошла тесты. Как вы считаете, ущербен ли в целом подход?
Вначале я составляю дерево BTHML-тэгов. Значение каждого узла дерева равно имени тэга, а его потомки — вложенные в него тэги. Корневой тэг имеет значение nil. Затем при считывании BCSS-правила оно в виде массива имён элементов упаковывается в массив (т.е., идёт массив, элементом которого является массив строк) и отправляется в дерево на разбор по следующему алгоритму:
1). Результат := 0.
2). Перебираем все элементы массива правил BCSS:
- Если значение узла равно первому элементу массива, то создаётся копия массива без первого элемента.
- Если эта копия пуста (разобрано всё правило BCSS), то Результат++.
- Иначе добавить эту копию к массиву правил bcss.
3). Если у элемента нет потомков, то вернуть Результат.
4). Иначе вернуть Результат + сумму результатов разбора массива правил всеми поддеревьями.
я также хотел ее решать. Но реализовывать заколебался... к тому же по времени не прошло бы... Есть еще 2 мысли: 1) с помощью регулярок попробовать 2) попробовать прикрутить Карпа... эти 2 мысли я только в голове прокрутил и что-то тоже не особо ... Вообще было бы не плохо увидеть разбор задач от людей которые решили ее
Милль пардон, есть ли способ узнать, почему программа не прошла окончательное тестирование: по времени или из-за неверного ответа?..
Есть. В своём профиле смотрите вкладку "попытки", нажимая в левом столбце на номер отправки увидите своё решение и там же отыщите тест, на котором программа свалилась. Из таблицы решения почему-то последние дни не открываются.
как правильно решалась B?
Перебором. Генерируем числа до тех пор, пока не случится повтор с одним из предыдущих. Выводим номер текущего — номер первого вхождения совпавшего элемента
разве число не может более одного раза входить в период?
кстати, да... вопрос в "кассу" я генерил последовательность до получения постоянного периода. Т.е. как минимум 3 раза должно появиться нужное число + период между 1-2 и 2-3 должен совпадать и быть минимальным.
Это лишняя работа. Период между 1-2 и 2-3 всегда будет одинаковым, так как это будут одинаковые последовательности, т.к. вся последовательность зависит только от начального элемента.
разобрался. генерируем m+1 число. по принципу Дирихле m+1 всегда совпадет с одним из m предыдущих чисел. выводим разницу их номеров.
Ну надо брать тогда ПОСЛЕДНЕЕ такое число. Иначе, очевидно, вы можете получить, kT, где T — период
ну я имел в виду, что мы будем искать это число с конца. спасибо за уточнение)
Один из вариантов: Храним на какой позиции в последовательности последний раз хранилось то или иное число. Затем подсчитываем следующее число последовательности и проверяем, встречалось ли оно до этого. Если да, то ответ —
(текущая позиция) - (позиция последнего вхождения этого числа)
. Так как последовательность всегда зацикливается (из условия), то ответ мы всегда найдем.Это первое, что приходит в голову :)
In problem E, can someone explain me why the answer for the following case is '3' ?
<hnhi><ihjhi><ihjhi></ihjhi></ihjhi><hnhi/></hnhi><h><hnhi><hnhi><ihjhi></ihjhi></hnhi></hnhi><ihjhi></ihjhi></h>
1 hnhi ihjhi2
ihjhi
in firsthnhi
1
ihjhi
in the middleYou shouldn't calculate pairs (
ihjhi
inhnhi
), but onlyihjhi
, that lies in anyhnhi
For example answer is always not bigger than tags number
Now I've got it. Thanks.
Как делать пследнюю задачу, подскажите?
А это рейтинговый контест или нет? Что-то рейтинг никак не обновляется
нет
если прочитать пост на главной внимательно, но в самом конце написано: "Зарегистрироваться на раунд можно в любое время вплоть до его окончания. Результаты раунда не будут влиять на рейтинг, внеконкурсное участие в раунде не разрешается. Впрочем, все задачи попадут в архив после окончания раунда"
Как правильно решалась C?
Моделированием того, что написано в условии
Вопрос снят, нашёл сабмиты в архиве :)
Считаю интересным ТЛ по задаче E. TL 8 секунд, если вы не заметили. Увидя такой большой ТЛ я побоялся и написал задачу очень аккуратно, оптимизировано. В итоге моё решение отработало за 270 мс :). Конечно это такое же лобовое решение за N * M. Основные оптимизации это
1) Конвертация 10-символьных строк в int64 с помощью сдвигов на 5 бит и прибавления номера буквы 'a' — 1, 'b' — 2.
2) Один DFS с циклом внутри по всем запросам.
3) Самописные списки смежности, без векторов.
ТЛ сделали с запасом, я аж испугался :)
А у меня 7580 мс, если память не изменяет :)
У меня 7730, вообще на грани =)
Можно узнать назначение функции ASS?
[:||||:]
Это assert
Она вызывает Runtime Error — Ошибку времени исполнения. Иногда полезно проверять условия в которых твоя программа работает. Например в процессе решения задачи ты оценил, что количество неких интересных чисел не может быть больше 1000, и на этом строишь своё решение. Я в таком случае после генерации этих чисел добавлю ASS(n <= MAX_N) и увидев Runtime Error подумаю, что ошибка в этом. Чтобы убедиться что сработал именно ASSERT можно изменить логику этой функции и вызывать к примеру TL, тогда следующим сабмитом ты будешь знать на 100% в чем ошибка. В приведенном примере я получу рантайм уже тестируя на сэмплах, но надеюсь назначение теперь более понятно.
ЗЫ: кроме того функция написана так, что в ней удобно ставить breakpoint во время дебага я часто этим пользуюсь и делаю что-то вроде
ASS(x == 3 && y == 42);
в нужных условиях программа падает и смотрю что на стеке, в переменных, почему мы сюда пришли...А еще как-то этот замечательный код
++(int*)0
перекочевал в release программы на работе. Юзеры были очень рады.m,n в задаче оба до 200, так что ты вероятно все же имел ввиду длину*m
Ну а если по делу: не знаю, по-моем логичнее все жестко оптимизить, когда ограниченяи маленькие а не большие:)) Тут видимо авторы дали волю всяким неосновным языкам
Ну я подумал что их авторские решения оазались неожиданно медленными, и потому перестраховался.
А зачем списки смежности?Чушь спросил.Ну я сначала парсил дерево, а затем его обходил. Можно конечно во время парсинга делать все действия. Разделяй и властвуй применил видимо автоматом, не думал даже это оптимизировать, да и так не плохо вышло.
В задаче про маршрутку надо массив из 10000000 элементов. В pascal не возможно его создать. Там через списки или есть более красивое решение???
В Delphi можно.
Не обязательно совсем, зачем так много. В моем решении используется массив на 100000 элементов.
Извиняюсь. :) Перестарался с нуликами. Да массив на 100000 надо, а в паскале можно только на 10000 элементов. Но я уже посмотрел в делфинет такой проблемы. :) Буду ее использовать.
Это разве что в турбо паскале каком-то массив на 100000 нельзя создать. Пишите во Free Pascal.
Спасибо за совет.
В моем решении только три массива по 10^5.
Сколько участников проходит в Round 2?
Ссылка на анонс(не меньше чем третья на этой странице)
Весело будет тем из заграницы кто пройдёт на финальный этап за 7 дней визу сделать :)
Will Round 1 be rated or not? There is no article announcing it.
Rated. It's written while registration
Will there be hacks in round 1? thanks
yes
Если ваши результаты были удалены, по ошибке, свяжитесь со мной для прояснения ситуации
В первом случае запятая не нужнаHow to solve question B. Pseudorandom sequence period by number theory?