Всем привет! :)
Я (Untitled) приглашаю вас к участию в Codeforces Round #178 (Div. 2), который будет проходить сегодня. Я хочу поблагодарить Gerald Delinur MikeMirzayanov за помощь в подготовке этого соревнования. Выражаю свою благодарность пользователю havaliza он тестировал задачи сегодняшнего раунда и делал иллюстрации к задачам.
Главный герой соревнования — Shaasss. Надеюсь, что вам понравится помогать ему! :D
Good luck and have fun! ;)
Это перевод оригинального поста автора с английского языка, комментарии на английском приветствуются.
За что пост-то заминусовали? Если автор контеста синий, это еще ни о чем не говорит)
P.S. Надеюсь к началу соревнования баг со сдачей задач пофиксят?
Ты так говоришь только потому, что сам синий :3
Ты так говориш, потому что недавно стал фиолетовым
Ты так говоришь, потому что тебе фиолетово
Тебе весело? а мне нет!
Я просто люблю ливать вклад долгими весенними вечерами.
А что за баг со сдачей задач?
Уже пофиксили :) Здесь про него писали
Good luck all. Author, thanks for contest!
Thanks all.
Теперь контест от зеленых будем ждать)
В этом есть что-то плохое?
Ну и что? Подумаешь. Может зеленый лучше приготовит контест чем фиолетовый. Главное что бы задачи были интересные)
А кто это -- Shaasss?
Змей или василиск?
Codeforces comes again!How happy am I!
Wish everyone good luck and high ratings! :D
Who is Shaass?
He's one the most popular heroes in Iran National Olympiad. I guess he's Shaazzz's brother, who is one the most popular and powerful heroes of Iran too :D.
emmm... No , he's not. he's me and my friends hero
ps. "Shaazzz" is't a guy... is it??
If you meant "fool" of "Shaass", yes it is. "fool is one the funniest and useful heroes in Mashhad. If you didn't, sorry. It was just a guess :D I know Shaazzz is not a person but a group or country or planet or many things else, but this name commonly use in <Shaazzz.blogfa.com> problems. HF & GL!
shaass is short form of shasgol! :D i think.
hey at all shaass is not a good word & we all know what does it mean. I can't understand why he choosed this,there's many better words than it.
it's a big hero, trust me ;)
It's somehow like "fool" in Persian, but in a funny way.
I know that people who are under 1900 rating can not prepare contest.
the quality of the contest cannot depend on the rating of the designer however if you remind MR HolkinPV he producted many constests that in that time his rate was under 1900!
i love short post (as well as short problem statement)
Why do not deleting comments !
Thank you ! Our teacher , havaliza didn't came school today, because this contest and we came back home soon.So i have too much energy for this contest!!! :D And one question : what are the scores??? 500-1000-1500-2000-2500 ?
В задаче 2 что вводить если это невозможно?
выводи "GANSTA SHEET!"
Ты создал новый профиль, чтобы оставить один комментарий?
Может, устроить на CF регистрацию как на хабре, то есть с помощью инвайтов?
what is the meaning of challenge-other when hack others
мда...теперь я понял что лучше пусть контесты дают люди рангом фиолетовые и высше!
честно мне контест не очень(
Такое ощущение, что чем меньше у человека рейтинг, тем сложнее в среднем получаются задачи.
Можно подумать если я дам контест будет 5 гробов?)
оу...Я надеюсь мир не докатиться до того что будут давать контесты такие как ты! Ты только А решил на этом контесте о каких гробах идет речь?
Следуя вашей логике это так)
А меня забавляет, как люди участвовавшие в 0-1 соревновании рассуждают о соответствии цветов участников и сложности составленных ими задач...
P.S. мультоводство обычно наказывается баном на различных ресурсах, где присутствуют рейтинги.
просто Dimitr мудак)
Ваша скудная логика соответствует Вашим словам.
Самый лёгкий контест ведь Эксперт готовил:)))
А можно ссылку на этот "Самый легкий контест"?
I think in the contest time, the message/talks option should be disabled. People like me who cannot solve more than (2 or 3) problems in a contest, get message "**How to solve B?**".
Задачи D и E вызвали у меня то же чувство, что и I у Сергея Федорова :).
И как решать E? Расскажите этот п...ц :)
Переберем ребро, которое будем выкидывать из графа. Выберем из каждой компоненты вершину с минимальной суммой расстояний до всех остальных. Проведем ребро между этими минимумами и посчитаем суммарную длину путей в полученном графе. При правильной реализации все это будет работать за квадрат. Более подробно объяснить с наскоку не могу — я только знаю идею, но никогда ее не реализовывал.
Зафиксируем удалённое ребро и подвесим два получившихся дерева за любые вершины. Теперь нужно выбрать по вершине в каждой компоненте.
Заметим, что если мы выбираем вершину в одной компоненте, то вклад в ответ, который дают рёбра в этой компоненте не зависит от второй выбранной вершины.
Таким образом, надо посчитать для каждого из 2 деревьев минимальную вершину и соединить их.
Теперь идём dfs-ом по 2м деревьям и для каждой вершины узнаём, что будет если она будет концом соединения. Для этого можно передавать в рекурсию вклад, который дают рёбра "выше" ребёнка, куда мы идём. И для каждой вершины предпросчитать, какой вклад даёт её поддерево. Это что-то в стиле
w * sz[v] * (n - sz[v])
.Можно порисовать и всё понять.
What is the answer on test: 2 2 1 1 UR ? I think answer is -1.
Жесть
http://mirror.codeforces.com/contest/294/submission/3489683
Подскажите, пожалуйста, что не так. Казалось бы там квадрат должен проходить.
Похоже на то, что константа большая. Код можно оптимизировать — например, этот перебор ~~~~~ for (int i = 0; i < n; i++) for (int j = 0; j < sz(g[i]); j++) ~~~~~ требует порядка 2*n времени, что в двое больше чем нужно.
I've been strugling with problem B, i made DP solution
based on easy thing: DP[thickness] = left
It is, DP[x] = y stands for: We have thickness x and we have to put y on top of our construction.
You can see my solution coded here: 3488673
Then find smallest x for which x>=DP[x]. But this gave me WA on #4 pretest.
Please explain right solution :)
First fix, the numbers of books with thickness 1 and 2. Then you can find the minimum width of the books at the top greedily.
I also used a DP solution, but since the constraints were so small, I used dp[N][MAX_WIDTH][MAX_WIDTH] array and did a knapsack on it for each value from i = 1 to (MAX_WIDTH — 1). MAX_WIDTH is the sum of width of all the books. If any of the values i were sufficient to satisfy all the constraints I considered that the minimum thickness solution. If not, I needed MAX_WIDTH. Could have used binary search to determine i as well if the constraints were a bit higher but didn't need to in this particular case. Here is my code. 3486021
You can do a greedy brute-force. Divide them into 2 arrays(one for thickness 1 and the other for thickness 2). Sort the arrays by width(biggest first) and than for every number of elements of array1 check every number of elements of array2(checking all combinations). And since they are sorted by width, it works.
See my solution: 3486814
Good contest, thank you. Problems are interesting, I like them.
But it is a bit hard for div2.
Shaass... Looks like a kind of a jewish name
It's not a real name in Farsi, it is sort of nickname for fool and stupid person :)
Why in third test on C answer is 6720?
Because there are 6720 ways.. Try to understand smaller tests.
1 2 3 4 5 6 7 8 9 10 11
0 0 0 1 0 0 0 1 0 0 0
answer=C(9,3) x C(6,3) x C(3,3) x (2^2)
maybe this helps you
-
В задаче С было бы неплохо видеть описание того, что такое "способ". И в случае n==m (все включено) правильным ответом может быть 0 или 1 — в зависимости от автора.
И да, задача А читалась тяжело и долго. А в целом контест неплохой.
Мы всегда можем ничего не сделать одним способом, другого не бывает :)
Хотя да, я забыл, что шагов — 0, способ — 1.
Если все включено ответ 1. Так вроде всегда.
What's the solution to C?
I look forward to reading the editorial about D and E.
Once again an unrated coder winning.
What is logic for Problem-C ..??
the idea is the following
lets take an example (* denotes lighted bulb)
1 2 3 * 4 5 6 7 * 8 9 10
you can divide this into sub problems. The idea here is to find the number of ways to switch on bulbs on both side of a * and merge the result. One more thing, for any sub problem like * 1 2 .. n *, the answer will be 2^(n-1) (i leave that to you).
Now, traversing the *s
1 2 3 * 4 5 6 7 * 8 9 10
for the first * , there are 3 bulbs And when treated independently, there is only one way to switch them all on. But for 4 5 6 7, the number of ways to switch them on when treated alone is 2^3 = 8. How do we merge this result? Notice that any solution for the sub problem {1 2 3 * 4 5 6 7 *} will be composed of a possible solution of {1 2 3} and a possible solution of {4 5 6 7}. To put it simply, if a solution is (3,2,1) and another (4,5,6,7), the final solution will be a tuple made from these two solutions with their ordering preserved (for two tuples of size n and m, there are C(n+m, n) final solutions). The ans = 1*2^3*C(4+3,3)
for the second '*'
we have the number of solution for the previous 7 bulbs, and there is only 1 way to switch on {8 9 10}. Thus
ans = ans*1*C(7+3, 3)
What is the function C doing?
combination(n, k)
I think it would be better if someone from div.2 (or <=1750) tested it also.
Why ..?
So that author made problems simpler or chose other simpler problems.
А кто такой Шаасс?
Thanks for quick change of rating. :-)
У кого-то было ВА8 по Е, я без понятия..
http://www.codeforces.com/contest/294/submission/3482847
I tried to hack this code for input
1 10 1 1 5
I think this code got RTE but hacking attempt was unsuccessful! why why why???
C++ is magic language. You should never try to hack C++ codes.
i also tried for a code to be RTE, and i was unsuccessful.
the things i learned is, from next time i won't try to hack any other code for RTE. :P
Data declared in the data segment (out of a function in C/C++) is page-aligned and initialized to 0. There is an offset before and after the array that is safe to work. The offset depends on the size of the array. It is a bad programming practice but most of the time works. See my B's solution: 3489441 I intentionally index -1 several times.
You should really read these two thread:
http://stackoverflow.com/questions/3473675/negative-array-indexes-in-c
http://stackoverflow.com/questions/671703/array-index-out-of-bound-in-c
I guess, GNU C++ compiler isn't so sensitive to RTE
A bug?
In my rating graph, the 2 points before today's contest seems to be swapped!
Почему в задаче Б не работает жадность по возрастанию величины w[i]/t[i] ?
Ведь по сути, переставляя одну книгу на верх, мы улучшаем ответ на t[i] за счёт потери w[i]+t[i] свободный длины, то-есть мы платим 1 + w[i]/t[i] за каждую единицу сэкономленной толщины. И тогда, очевидно, чем дешевле мы набираем эти единицы, тем больше мы их сможем набрать. И так как у нас t[i] может быть только 1 или 2, не может быть ситуации, когда нам выгодно взять несколько книг по большей стоимости за единицу толщины, чем одну по меньшей, за исключением самой последней книги, которую мы берём.
Ну и вот собственно такое решение валится на 20м тесте: 3490641 . Мб в моей реализации что-то не так, а не в алгоритме?)
upd. Всё ясно, не хватало лишь проверки последней взятой жадностью книги, так как если её толщина равна 1, то её может быть выгодно заменить на более дорогую с толщиной 2. 3490773
Объяснить не могу, зато могу дать тест:
А как её правильно решать?
Я сдал тупой рюкзак за куб, в чужих исходниках видел выбор i книг с толщиной 1 и минимальной шириной, j книг с толщиной 2 и тоже минимальной шириной, с проверкой допустимости такого выбора.
Можете поподробней про рюкзак? Это была первая мысль, но я её успешно отбросил.
Пусть мы могли расставить первые i книг так, чтобы ширина нижнего слоя была равна ii, ширина верхнего слоя — jj (при подсчете динамики допустим, что jj может быть больше ii). Тогда мы можем поставить текущую книгу вертикально (переход в состояние dp[i + 1][ii + t[i]][jj]), либо положить ее горизонтально (переход в состояние dp[i + 1][ii][jj + w[i]]). Потом, в самом конце, выберем среди всех возможных dp[n][ii][jj] такое, что ii будет минимальным, а jj не будет превосходить ii.
Короче, лучше почитайте мой код :).
Осознал, спасибо.
У меня не хватало лишь проверки последней взятой жадностью книги, так как если её толщина равна 1, то её может быть выгодно заменить на более дорогую с толщиной 2.
Теперь всё ок: 3490773 .
Спасибо=)
for problem D,what does the following sentence mean? "The robot stops painting the first moment the floor is checkered. "
"Checkered" means "painted like a checkerboard".
Problem D was harder than usual, at least for a div 2 contest.
Finally at the end of the contest I must say that you are not "Untitled" but titled to organise a div 1 contest also :)
Great contest.Good luck
Is the editorial out?
Первая идея с сортировкой на B не прошла, как тока собирался сдать новое решение, сеть с интернетом пропали. P.S. новое решение проходит.
The problem set seems to be A D D E E... But I enjoyed it!
Another time, an unrated user won the contest!
Nice contest Thanks ;)
Nice contest :) waiting for the editorial eagerly...
You don't want to publish tutorial?
Hello Everyone, Can anyone explain me the solution of the problem B of this contest. I am completely confused after reading some of the comments here as they suggest to check all the combination of the numbers to get the minimum value, where from the condition given in the problem appears to be very straightforward to sort with widths and collect first few as horizontal and the rest of others as vertical, but there code show that they try to check all the combination but actually they does not check all of the combination actually and got correct answer. As the description of the problem and the comment does not clear here to me, I beg your help to understand me the problem with the code.
Thank you!
This goes said that it check all the combination but actually it does not :(
http://www.codeforces.com/contest/294/submission/3486814
where this is my solution
http://www.codeforces.com/contest/294/submission/3487146
That solution does the following: initially tries to put vertically some books with thickness equal to 1 AND some books with total thickness equal to 2, then tries to put horizontally all the books with thickness equal to 2 and some books with thickness equal to 1, then, finally, tries to put horizontally all the books with thickness equal to 1 and some books with thickness equal to 2.
An alternative solution with dynamic programming: Dp[i][j][k] — 1 / 0 if you can obtain from the first i books a total thickness of the vertical books equal to j and a total widthness of the horizontal books equal to k. When you want to add a new book, you can put it vertically or horizontally. In the end, you have to find the smallest i with at least one value equal to 1 from Dp[N][i][j], j <= i.
I think this probblem can use One-zero backpack. http://mirror.codeforces.com/contest/294/submission/3485742
when we can meet shaass again?!?
Outdoors for example.
Эм, может я чего-то не понимаю, но, по идее, в блоге должны были появиться результаты? Или где их можно посмотреть?
http://mirror.codeforces.com/contest/294/standings
Да в блоге и разбор должен появляться, но, похоже, в этот раз и то, и то съел Шаасс.