Всем привет!
Напоминаем, что 19 июня 2016 года в 14-00 по московскому времени состоится отборочный раунд Russian Code Cup 2016. В раунде могут принять участие по 200 лучших с каждой из квалификаций, 200 лучших в отборочном раунде получат футболку чемпионата, а топ 50 попадут в финал, который пройдет в сентябре, в финале участники сразятся за денежные призы.
Всем удачи и до встречи на http://russiancodecup.ru !
I'm wondering what does "Register at http://russiancodecup.ru and participate!" mean in the invitation email?
Maybe they meant "log in" :v
Что-то я не могу найти, а сколько времени длится отборочный раунд?
два часа
с 14:00 до 16:00 (МСК)
на главной написано
Да, точно, спасибо. Почему бы это было, интересно, в правилах не написать?
How to solve B? i got WA several times with ternary search.
sort according to non-decreasing L[i] , now if u set number of left legs to L[i] , the number of valid pairs will be number of R[j] ≤ N - L[i] where 1 ≤ j ≤ i , so do coordinate compression and apply a BIT.
A priority queue would do too. Always pop the queue whenever Rtop > N - L[i] because it will never be valid again as N - L[i] is non-increasing. The answer for taking L[i] as the number of left legs equals the size of the queue after popping invalid items.
P.S. Hey fellow doge!! LOL
I sorted the sequences increasing with respect to L.
After that, I iterate in that sequence, let's say at step i we have Li as the left number:
How to solve E???
For each i, compute two values:
This will lead to an O(nlog2n) solution. However I'm not sure if this is intended (sparse table got MLE, segment tree got TLE, segment tree + pruning passes).
There are absolutely no complex DS involved, at least in my solution.
First, think about why it's enough to iterate "x -> 1 + sum of numbers up to x" for a given range until the sum is smaller than x. It's fast enough, since as we're iterating, x strictly increases and so the sum increases quite quickly.
We can find sums in a given range using a Fenwick tree. We'll process numbers in non-decreasing order, add them to the Fenwick tree and deal with iterations in all queries at the same time.
When we've just processed all numbers ≤ x for some query's current x, we can find the sum for its next iteration, check if it's time to stop and if not, move on to the next iteration there. The current iterations for all queries can be stored in a set / priority queue / etc., from which we can take the smallest ones as long as they're less than the currently processed number. Time complexity: unknown, but it passed without any optimisations.
UPD: Downvote logic on CF again. If I'm wrong, why not comment?
You are actually right, it is N log N log K, where K=10^9. Each query will be processed log K times max, and they are in the priority queue.
i used persistent segtree to get sum from L to R with values from x to y. It passes with coordinate compression.
So how to solve E?
I tried complicated O(n * sqrt(n) * log(n)) solution and got TLE on test 27.
: let's add numbers one by one starting from the smallest, and maintain sums on the segments from queries. If we're adding number x and there are sums ≤ x - 2, recompute them (and if they're still too small — we're done). The trick is, each sum will be recomputed logarithmic number of times: if it was s1, then s2 and then s3, then s3 - s2 ≥ s1.
One pitfall is that Segment Tree is too slow here :( But Fenwick tree passes.
That can be done online with persistent segment tree code
It looks like you uploaded a wrong code. It doesn't work on the sample, there shoud be inequalities on line 188.
EDIT: OK, the bug is not here, now I don't know how to fix it.
Yes, my fault. There should be += instead of = in line 249. I thought no one run the code which is posted as example:)
I love this piece of your code:
typedef int itn;
:DПравда же в Е такое?
если для некоторого отрезка мы можем получить числа от 1 до m, то если добавим еще число H к отрезку и H <= m+1, то сможем получить все числа от 1 до m+H, а m+H+1 не сможем?
Да, правда
у меня WA6 =(
Нет, не правда. Если в отрезке числа 1 и 3, то после добавления H=1 можно получить числа от 1 до 5.
Ну я еще добавляю еще не добавленные числа, в данном случае я добавлю 3 после 2ой 1
А сумма в лонгах хранится?
да, у меня была проблема в лонгах, но мое решение ТЛ ловит на 27 все равно)
I was sad that I spent the whole contest trying to get D accepted, when I saw tourist and Petr failed it too, I'm completely fine with it now :P
Edit: Same code passes in the Gym in 300 ms, what was up with the time limit for this one?
А как дорешивать?
После раунда архив с тестами выкладывают, надо подождать.
Обычно Михаил добавляет в тренировки, как только появляются тесты.
Я прям наготове! Я поправил свою Е через минуты 3 после конца, сам очень хочу проверить его.
Контест в тренировках: 2016 Russian Code Cup (RCC 16), Elimination Round.
Что ж авторы задач в последнее время такие злые — E очередной пример задачи, где дерево интервалов не влезает, а Фенвик влезает. И это не первый пример такой задачи за последний год.
А как решать в принципе задачу Е?
Что? У меня 2 персистентых дерева отрезков спокойно влезли за .
Если моё дерево интервалов чем-то не оптимально — я бы хотел узнать чем: http://pastebin.com/vn760NFx
(а как персистентными деревьями решать? у меня обычными)
Чтобы ответить на запрос, будем поддерживать сумму. Изначально она равна 0. Далее ищем минимальный элемент, больший суммы(для этого нужно первое персистентное дерево), пусть он равен x, считаем сумму элементов, меньших x(для этого второе), проверяем, что она не меньше x - 1. Если меньше, то ответ — сумма + 1, иначе добавляем x к сумму и повторяем эту операцию. Когда наша сумма больше всех элементов на отрезке, останавливемся и выводим сумму на отрезке + 1. Код.
Обычное ДО нормально зашло — код.
Ну что значит нормально? Ты написал дерево отрезков с памятью не степень двойки (поэтому у тебя нет ML). Я сначала написал на векторах и получил ТЛ, потом сделал массивы размера 33 и получил МЛ, а потом поменял их на массивы размера 31 и получил ОК. Плюс у тебя какая-то хитрость в нахождении ответа. У меня просто есть некая информация от любого отрезка, по которой я умею получать ответ для этого отрезка. В результате у меня один вызов функции снаружи. У тебя какой-то while. Ну круто, что :)
Зачем писать свой merge? :)
Я обещаю когда-нибудь выучить STL, честное слово! :)
Ну так не зря в том году они Фенвика прям на футболку печатали, а я стебался еще
У меня зашло двумерное дерево отрезков за O(n log^3 n). Видимо они тесты против какого-то конкретного решения делали (ну или против жавы)
Ну не знаю, у меня персистентное дерево отрезков прошло с 1 попытки. А выше тоже жалуются, что у них дерево отрезков ТЛится...
Мое ДО тут на КФ прошло с двухкратным запасом. Сложно сказать, что там со скоростью на RCC, конечно
Что-то несправедливо тебя задаунвотили, это правильное замечание. Да, я даже не пробовал дерево отрезков, сразу делал фенвика на это. Особенно печально что оказывается задача уже была, я был шокирован увидев на 15-ой минуте сабмит по ней.
Ну и понятно что можно было персистентное писать, просто я их не люблю :)
201st. Nice.
Сегодня я побуду тем парнем, который постит "задача Е — баян!": https://www.codechef.com/JAN14/problems/FRBSUM
Правда мне это не помогло: пока я подгонял константу в решении, я потратил 4 бревна :(
Интересно, а вот нафига задачи, которые уже где-то были включать в контест? Видимо, жюри не знало о её существовании, да? )))
Разумеется, этого не избежать :) Это был не комментарий из серии "тур говно потому что задача баян", а комментарий из серии "вот какой забавный факт".
Ты прав)) и правда забавно! :)
F была в этом году на каких-то сборах. Мне сокомандники решение рассказывали. :)
For B,If there are multiple solutions, output any of them? Why did I always get WA on test2...
Are both your numbers larger than 1?
Duh, how is that so many people solved E and some even in 7 minutes :f? I managed to get it ACed, but I think my idea is not that straghtforward. I divided numbers from input into intervals [2k, 2k + 1) and for every such part I built a segment tree taking minimum on interval and prefix sums. Then I did this:
But it still needed a bit of stupid optimizing since I got TLE.
Is that a case that many people had prewritten some structure like "what is sum of numbers on interval [l, r] not larger than x?"
Not the first time most important problem of RCC elimination round is from some other contest. Copy-pasting doesn't take that much time.
I spent about 10 minutes. Copy-paste of Fenwick tree (+2 minutes) and fast input-output.
Well known greedy
We see 2D-queries
To solve the problem in offline sort queries and use Fenwick tree. Implementation is short, 25-30 lines of not copy-pasted code
P.S. Some people said the problem was on CodeChef contest. For me it was a new one.
The problem E is the same as this problem (editorial).
One more resource with problem E: http://cs.stackexchange.com/questions/19651/minimum-number-that-cannot-be-formed-by-any-subset-of-an-array
And that's why I was shocked that someone got AC in 15-th minute of competition :)
чот бревен сегодня как-то многовато :с
How to solve problem D??
Greedy algorithm. First fill all containers to minimum volume. Then, start filling the containers to maximum volume in the order of increasing pi. When filling a container to volume v, reserve of reagent ci and of any reagent (you need to track the total volume of unreserved reagents).
Do you have some ideas why this has enough precision (I'm asking partly because my extremely similar solution failed because of a precision issue)?
It looks like you're operating with numbers as large as 1e10, then the error we get on each operation there is around 1e-6, so it seems unexpected that we can get an answer that's checked with tolerance 1e-6 and pass?
In the first part of my program (when the containers are filled to minimum volume), both
sumv
andsumcap
are integers, so there is no rounding errors here. In the second part (when the containers are filled greedily),sumv
is an integer until the very end. In the last part (when the answer is generated), there are no values as large as 1010. So, the only interesting place is the second comparison betweensumv
andsumcap
. Well, it works for some reason, quite possibly because of weak tests. In my submission,EPS
is1e-9
, but it was mostly a guess.Thanks — keeping everything in integers as long as possible is pretty clever! Although as you point out, it doesn't seem to help for the worst possible case.
I've looked at both reference solutions, and they use eps liberally here and there, so maybe the contest authors know why there is no big precision loss here?
In my solution, I've used the same trick with multiplying certain numbers by 100 to avoid imprecision there, but switched from integers to doubles slightly earlier, and maybe have a less lucky eps.
Yeah, it looks like this problem is unsolvable without BigIntegers. Here's a testcase where we can actually pour out all liquid except 100/lcm(1,2,3,..,100) which is about 1.5e-39. So the correct answer is NO, while I expect all passing solutions to output YES.
I hope one day people finally understand that problems with yes/no answers and double are bullshit
Well, they are not bullshit, if say in statement something like "if change all parametrs within blablabla, answer will not change". But probably it can be hard to validate.
Well, it's almost always hard to validate and/or create adequate tests (i.e there should be tests where params within 2*blahblah and that may break smth) and/or nobody cares
If that's done, I agree that's OK
not the first time.... and this passed sample and wa at test 4...
Same me, "cout<<-1<"\n" bring me out of top 200.
The contest in GYM: 2016 Russian Code Cup (RCC 16), Elimination Round. Welcome to practice!
Thanks for organizers and jury. I liked it!
Как решать C?
Заметим, что все вершины должны иметь степень ≤ 3, а корень — ≤ 2.
Для каждой вершины посчитаем расстояние до самой далекой динамикой на дереве (сначала самую далекую в поддереве, потом в обратную сторону). Далее переберем корень (учитывая ограничение на его степень). Для каждого корня, очевидно, высота дерева будет той самой, которую мы посчитали в динамике, и, соответственно, ответом для него будет 2h - 1 - n. Выбираем корень с наименьшим h, выводим ответ.Код
А я правильно понимаю, что динамика поиска расстояний между вершинами работает за линию от числа вершин только потому, что степень вершины в этой задаче не больше 3? Потому что там от каждой вершины идет цикл по всем детям родителя, что может стать квадратом в произвольном дереве (например, корень, у которого N - 1 непосредственных детей).
Можно ли как-нибудь такое за O(N) посчитать в произвольном дереве?
Edit: вроде понял, нужно в каждой вершине хранить две самые дальние от нее, чтобы проверять у родителя только их, а не всех детей родителя.
я искал ближайшую вершину степени <3 к центру графа, как раз линия
Можно найти две самые удаленные вершины в дереве. Для любой вершины одна из самых удаленных — какая-то из этих двух.
Можно сделать то же самое в произвольном дереве с помощью одного простого ускорения: мы считаем максимум глубины среди почти всех детей в дереве кроме одного (X по порядку в списке смежности предка), а это максимум на префиксе от 0 до X-1-го ребенка и максимум с X+1-го ребенка до конца. Если предподсчитать максимумы на префиксе и суффиксе в вершине, то можно считать dp_up за константу. Естественно для удобства нужно перенести расчёт dp_up туда, где ему и положено быть — в предков :)
Хотя конечно посчитать расстояние до концов диаметра существенно проще.
Каков дизайн футболок?
Еще отдельно хотелось бы выразить спасибо дизайнерам mail.ru за кнопку переключения языков в подвале страницы, наряду с такой важной информацией как:
Я загрузил сайт, удивился английскому интерфейсу, потратил несколько минут на поиск смены языка (шапка страницы, профиль) и забил.
Что мешало посмотреть в адресную строку и поменять
en
наru
?Это не то место, где я обычно ищу смену языка.
а зря, самый универсальный способ на моей памяти
Accept-Language самый универсальный способ :) Сразу в HTTP-запросе менять
спорно, часто по ip страну определяют и уже по ней язык
Will participants not in Russia still receive shirts if we came top 200? I'm just curious as it wasn't clear on the website.
still nobody answer
noooo