Привет, Codeforces!
23 октября в 18:35 MSK состоится рейтинговый Div. 2 раунд. Участники из первого дивизиона приглашаются для внеконкурсного участия.
Задачи для раунда были подготовлены мною. Спасибо Даниилу (qoo2p5) Николенко, Никите (FalseMirror) Босову, Александру (Alladdin) Проскурину, AmirReza (Arpa) PoorAkhavan, Ильдару (300iq) Гайнуллину, Алексею (ashmelev) Шмелеву за помощь в подготовке и тестировании задач, Ане Изюмовой за помощь с переводом, Николаю (KAN) Калинину за координацию раунда и Михаилу (MikeMirzayanov) Мирзаянову за замечательные платформы Codeforces и Polygon.
У вас будет 2 часа на решение 6 задач.
Надеюсь, вам понравятся задачи! Удачи!
Upd1: Разбор
Upd2: Поздравляем победителей!
Автокомментарий: текст был обновлен пользователем Livace (предыдущая версия, новая версия, сравнить).
IS IT RATED?
Before the contest start, always a lot of people want to kown if it is rated, is that inportant?
not iNportant at all xD
Is it rated?
As far as I recall, all Codeforce Rounds in the past 8 months ago since joining the Codeforce community have been rated by default, unless otherwise stated before, during, or after the Contest.
As far as I remember, all the Codeforce Rounds in the past eight months have been rated unless otherwise stated before, during, or after the Contest.
"stated before, during, or after the Contest."
lmao
During or after the Contest due to sudden troubles during the Contest such as significant error(s) in some problems or temporary server failure.
seriously guys , how two comments with same question and in the same time and they have the same color :/ , the first got upvotes and the other one got downvotes ?
A simple plausible explanation is that what is disliked about the second one is not its content, but its repetition, i.e. the second one is a redundant comment.
probably the uppercase :-P
Fake accounts :p
Probably because the all caps comment looks sarcastic.
Possible reason may be, The one with more Down votes is 'Grey Coder' and 'Blue' on other side(colour matters).
** ** *****?
** ** *****?
Is it Rated Contest or unrated???
It is a rated contest.
thanks bro :)
Hey Ahsan don't ask that kind of silly question.Div-1,Div-2 codeforces rounds are rated.
To all people who are asking whether the contest is rated: check the tags.
del
The increase of the legendary word.
![](/predownloaded/d0/b9/d0b964ea7fc5291e83806c0485c9c51acb70086e.png)
Sad, but true :-/
Hope problem statements are understandable easily and the contest will enjoyable.
I'm one point below div 1. So to me seems like a notorious coincidence
I hope you don't lose points in this contest otherwise it won't be a NOTORIOUS coincidence.
Had the same situation few rounds ago, but was 5 points far from div1 :D
The rest of the story isn't really cool xD
Wish you good luck ^^
that was very comforting for him/her i guess. lol XD !!!
Well, he became candidate so I think that was very comforting xD
Congratulations ^^
I hope the difficulty of problems decreases gradually. In the last few contests, I have noticed a massive decrease in the number of submissions for the last two problems. The image shows one such contest. Note the actual number of submissions during the contest were quite less than that in the image. The same thing happened in yesterday's cook off on codechef.![](/predownloaded/9f/b8/9fb819f745f17b87fde192deb11e964fd3a8ed80.png)
these things happen only in Div2 . in Div1 the number of solved doesnt differ much
And also, short problem statements.
Oh, God why?
I hoped nobody would notice that. I think it's the most stupid mistake somebody made in announcement.
Stupid community. Even CIS chat is better.
CIS? What does the acronym stands for? My wildest guess is
CSAcedemy
Scoring distribution?
Like always, scores will be disclosed only after start of contest. :(
delayed :P
Delays, classic
Wait for 10 minutes more :(
Looks like they wanted the total registrations to reach 7k :P
this delay means a lot of inqueue :(
No actually it works fast.
Thanks for the delay. I've just noticed that I didn't register for the contest before the delay.
Please, no more delays.
очень обидно что во время прохождения, просто выбросили. Зарегистрировалась, отправила 1 задачу, а на второй пишут что надо зарегистрироваться? это как???
Вы зарегистрированы на раунд. Проверьте, что вы вошли в свой аккаунт.
How to solve Div2 B Nikita And Strings.i didnt' able to solve it plzz help
my solution is to write two nested loops with the end of the first part and the begin of the third part and maximize your solution and you can calculate the length of the final string with pre-calculations in O(1)
brute force for 2 points to split the string into 3 parts..
That gives TLE? I did same thing and got TLE
yes, it will give TLE if you use any further loop inside 2 nested loops to iterate the string. you can use the 2nd loop to count the frequency of 'a' and 'b' at 2nd and 3rd part of the string. see my code.
Can anyone explain the problem 3? It seem simple but got WA.
it didnt' seem simple to me
I thought that we simply bomb n to 1, and then bomb 2 place.
That would destroy all tanks.
But got WA
Can anyone exaplain why this is wrong?
For example: if you bomb the 7th, tanks can move to 8, and they'll survive
When you bomb N, and then N-1, some tanks from N-1 might move to N after bombing
I thought according to the problem, tanks that are not in pos. 1 must move to n-1. So tanks in n-1 must all move to n-2.
Problem C explanation :
First drop bombs on even numbered cells, then on odd numbered cells, then again on even numbered cells(1-indexing). My solution 31644671
we simply bomb n to 1, and then bomb 2 place.
That would destroy all tanks. Can u explain why this got WA
That's what I did too. Don't see why it's WA
Put bombs first on all even number positions, then odd number positions and finally even number positions. In this way we can make sure every tank is put bombs exactly twice.
How did you prove that it is optimal?
Well, how i solved this question was as follows : I first of all ran a dp solution on my computer for 1<=n<=200( as the dp solution in O(n*n) ), and found out that it is always optimal to pick 2nd number from the start, and therefore I ran a recursive solution. Here is the link to my solution: http://codeforces.com/contest/877/submission/31652910
Can you share your dp solution?
https://ideone.com/IUsyIz here is the link to my O(n*n) dp code.
O(n)
Actually I also coded it in O(n). I was just proving that it is optimal by O(n*n) dp.
Well, you can assume that each tank is in either Even or Odd cell. If its blasted, it goes from Even->Odd or Odd->Even
So, just had to print minimum of Even->Odd->Even or Odd->Even->Odd, of which for odd n, first is smaller
Every tank has to be dropped a bomb at least twice. Using this method every tank will be dropped a bomb exactly twice. So no bomb is wasted(i.e. No tank is dropped a bomb more than twice). This has to be optimal.
How to solve B ??
Iterate for ending position of portion1 and starting position of portion2. Use prefix sum to speed up.
was O(N*M*2*log(n*m)*8) too much for D
How to solve C ?
I had the following logic : - Bomb all even cells. Now all tanks are on odd cells - Bomb all odd cells. All (intial) even cells are destroyed. All odd cells are on even cells - Bomb all even cells.
The last logical step is to show that there is no better strategy.
How do you prove that there is no better strategy?
I don't know. I just know that the lower bound is n (we must hit every cell) and upper bound is n + n / 2. The truth is somewhere in-between :)
How to solve D?
I did bfs after putting all empty cells in set rowwise and column wise and deleting cells from set after pushing in bfs queue but got TLE on test 6
What was A's hack ?
example test: David_David. Many people didnt check one name to repeat twice or more
Does this problem have a logN per query solution? :
ask for number of occurences of x in range l,r
update range l,r by some d
A was clearly the hardest problem, as I didn't really understand the following sentence. :(
"It is known, that problem is from this contest iff its name contains one of Alex's friends' name exactly once."
So I made two submissions, both of which are incorrect but passed pretests. :P
then what about C,d and E did u solve it
Passed pretests on everything.
Why in D grid is 1000 x 1000 (when time limit is 2 sec), it is too big for slower languages. Why not 500 x 500?
nmk solutions can pass then
If k is big enough then it wouldn't pass 500 x 500? Look there are no solutions with Python nor PyPy, and my Perl solution O(nm) was too slow too :(
E was just a tree version of http://www.spoj.com/problems/LITE/
Also, 242E - XOR on Segment with ai < 2 instead.
Anyone can tell me how they did C? I did a recurrence but I got WA. if its odd then hit the middle one, then recursively destroy (i, mid-1) and (mid+1, j). If even then if mid=floor(n/2) destroy (i,mid) then destroy (mid+1, j) then hit mid. Anyone sees why this is wrong or what the correct answer is?
I destroyed all even first. Then all odd. Then all even again. Passed Pretests. I dont know about sys tests.
it isn't really a recursive structure since after hitting mid, you leave a guy with 1 health on mid-1 or mid+1, but all the other guys have health 2
Then you'll get a plan with n + n/2 steps
I had same mistake. I used almost the same solution.
This solution definitely constructive a valid answer, but not in minimum number of bombs needed. I believe it fails when there is a configuration where some element appears once. Just check answer when N = 10.
Is the intented solution for F O(NsqrtN), and if it is, why are solutions with that complexity getting a TLE?
hack for A-> DDanilanil :)
Some other people forgot to check if the name does not appear more than once in the problem name. Simple hack : AnnAnn but your case is more tricky like AAnnnn since some people removes the first occurrence of the name and then recheck if it is in there one more time.
How to solve F?
MO
[Edit]: I got why my solution didn't work (an implementation bug).
I wrote Java solution using Mo (see the submission) and got TLE. I hope this is not the intended solution or the authors will provide a Java implementation for it.
I've also got TLE with Mo on java. I found only one solution on java by uwi (He didn't use maps)
He didn't write Mo
You can get rid of the map using preindexing as for each array value v you'll need only three values (v, v — k, v + k)
I have just done that and it didn't pass submission
Learn C++ :P
I can write in C++. I just don't like it :"D. Solving in Java helped me a lot to always look for the optimal solution
Can't D be done in O(n*m)? I see a lot of O(n*m*k) solutions passing pretests.
Any corner case for Div2 B ?
Can't D be done in O(n*m)? I see a lot of solutions with complexity O(n*m*k) passing pretests.
Carefully observe the 'break' statement and calculate the complexity.
No, I noticed pure O(n*m*k) solutions without any break statements passing the pretests.
I have passed the pretests without any break (see 31647369). However, I got AC after using breaks (31658960), but I do not think I should have gotten AC on a solution of
O(nmk)
.I think that my solution would TLE on a test of the form below. The answer is
-1
.I got TL on such test and I really don't understand why your solution got AC. That's mine — 31650304. It seems to me that they are equal to each other.
Your source code has the break (actually
return 0
) when you pop(x2, y2)
from the queue. My source breaks a little earlier, when(x2, y2)
is pushed into the queue.Yeah! Thanks a lot! Actually, I have noticed it a minute ago too. Then, the question why your solution works faster then mine? Difference ~ 500 ms. Because of using vectors? 31661871
What should be the output for this in problem A : "DanilDanilOlya"
NO
but the question said, it will be "YES" if ANY ONE OF THE FRIENDS come exactly once.. Little confused, if exactly one of the friends should come exactly once, or any one of them should come exactly once !?!?
The last sample helps to understand which of them is true, doesn't it?
How to Solve C ?
Ended up only solving D. A failed at systest because of stupid sizetype being unsigned(so 1-2=2^32-1 which isn't <1), B failed because i stopped searching for more As/Bs after finding B/A, while D was easy BFS(at least for me). I don't understand how did such a small amount of people solve D.
Codeforces HACK round #442 (Div. 2)
If someone would be kind enough to tell me what went wrong with my E submission ( http://codeforces.com/contest/877/submission/31648193 ). Thanks
Is there something wrong with codeforces's servers ???
I have submitted the same code 3 times and each time I got run time error even though I didn't change anything in the code.
Can someone tell me why 31659189 solution is giving runtime error ?
My idea is to turn the tree to an array and then turn this array into sqrt(n) Buckets and then preform the queries on them to get a n * sqrt(n) solution
can anybody plz tell me how to solve div2 E.
Can anyone explain me why? 31638541
n-p[r].size()+1
gets converted to unsigned.Oh boy :(
oh boy!
I got WA on D test 31
I used a simple BFS too and can't find any bugs in my code or algorithm
could sb help me with it :'(
same here
same here 31657307
You have to maintain visited array for all the 4 sides, mine code also failed due to this but now it passed by maintaining the above information :(
Do you have any case to prove this?, I haven't been able to come up with a case that makes fail my submission. And test 31 is too large :'(
EDIT: I found the case.
the visit order may be the cause. So you need to memorize the direction too, seen[f][c][d] and that should fix it.
I think test cases are little weak as my this solution passes.
Well, used 4 ifs instead :P
dirtyProgramming !
Can somebody tell why this code gave WA for case 49 — http://codeforces.com/contest/877/submission/31647784 in problem D?
Did you find the mistake? My solution failed on the same test case.
Along with checking dist[i][j] != -1, you also have to check whether dist[i][j] <= dist[curr_i][curr_j] for the breaking condition.
Submission with the mentioned changes
Suppose if I have a map of size 4 in Div2 C: and I go with the sequence : 2 1 4 3 2 What's wrong with this? Aren't all the tanks damaged after following this sequence? Please Help!
The tank on 3 can go to 4 so you would need to bomb 4 again.
I am sorry, if I am wrong, but we are told that a tank in cell n can only go to n-1 cell, so how would it go to 4, if you could explain this a bit? Thanks!
It is given in the question that it can go to n+1 or n-1. Only the tank at the border cannot do that.
forth cell isn't destroyed
Fourth*
could somebody plz tell me why this simple bfs code fails on test 31 http://ide.geeksforgeeks.org/5QUsiv Thanks.
It failed due to the break part in the 60th line. Supose you are in position xi, yi and you are going downwards. Now you are checking (xi+i,y) but this was already visited. Just because you have previously visited (xi+i,y) you cannot assume that the next cell (xi+i+1,y) (or any of the next reachable cells) is also visited, hence the break is incorrect. And without the break you get TLE.
ok ok. got it. so what i think is if a cell is already visited, better not push it, instead of breaking at the point
Livace do you hate me? I'm in top 5 div1 :(
Oh, sorry. I'll fix it.
I solved B by the DP method. I tried to find the largest "increasing" subsequence. Wrong answer 15. Can anybody prove why my decision is wrong? My solve: 31644137
Your code fails for
output should be 6
The problems were cool, but the pretests were really annoying since they actually didn't contain anything important (like tests 48 & 49 for D).
Only 2 D's from my room passed system testing. Out of 14!
Hey! What were those cases ? My solution is failing on Case 30.
In the Problem statement for C it was given that If we drop a bomb on the tank in nth cell then the tank will be half damaged and will move to (n-1)th cell.So if we start dropping bombs from nth cell and and go on until first and then in the very last we drop bomb on 2nd then it gives answer (n+1).
for example say we have n=3. So at first we have a configuration 1 2 3. After dropping the first bomb on third cell--> 1 23 _ (3rd tank moved to 2nd cell and half damaged) After dropping the 2nd bomb on 2nd cell --> 12 _ _ (3rd tank is completely destroyed and 2nd is half damaged and moved 1st cell) After dropping the 3rd bomb on 1st cell --> _ 1 _ (2nd tank is completely destroyed and 1st tank is moved to 2nd cell)
This is true for any number of cell.
Have I misunderstood something? I can't also see that problem now as the problem page is showing a error saying "Oops! Something broke on Codeforces. Do not panic. You can try to reload the page or go back to the main page . We already read the megabytes of logs, solving the problem."
After I saw that contest will be only 2 hours long, when 6 problems, I thought maybe contest should be longer. Now I think that contest surely should be longer! Because three problems A, B, D are really tricky so interesting to hack.
I feel like I've seen problem E before...
Now I understood, similar to Light Switching with a dfs order.
I have a question about div2 D.
Here is the statement of concern:
"Olya drank a lot of energy drink, so now she can run k meters per second. Each second she chooses one of the four directions (up, down, left or right) and runs from 1 to k meters in this direction. Of course, she can only run through empty cells."
Does this mean she can run UP to k or she has to run k unless she hits the edge/an obstacle? I assumed it meant she ran k, but my solution — 31656460 failed test case 5.
up to k,you can only run 1
How should i understand div2 B correctly my friends? I thought a beautiful string is a string that can be cut into exactly 3 substrings described as in the problem. What did i do wrong? I can't even understand english nowadays!
Substrings can be empty.
I'm fought up at test 3 bbabbbaabbbb with my result is 6, while the correct answer is 9. How can i produce a substring with 3 (may-empty) parts that part 1 and 3 contain only 'a' and part 2 contains only 'b'? Really in this case i just can see the result are abbbaa or aabbbb and nothing left!
Sorry guys, just ignore it.
in problem B can anyone please explain where my approach is wrong.
I first created blocks of a's and b's with their respective counts and then i consider the current block is the middle element and if it is 'b' then left and right part could be anything (i.e. bba, bbb, aba, abb) and if current block is 'a' then (aaa, aab, baa) and find the maximum among these (to do this i just calculate the total 'a' and 'b' in the left and right substring respectively).
code : http://codeforces.com/contest/877/submission/31666767
please help me where i am wrong !
If the string form is bbb or abb why not considering adding somemore 'a' blocks after it? You may try the input abbbabbba.
thanks a lot !!
Problem F Why unordered_map is even slower than map? Both TLE on test 11
unordered_map use 1450ms on test 10 map use only 576ms array use 249ms on test 10
31659292 877B - Nikita and string Hey can somebody help me find out what is wrong with my solution to B — Nikita and String. I got wrong answer in test case 37. Thanks.
It's easy to see. You did not consider the case when the string contains only a's.
In div2 D, what ever i do, i always get MLE at test case 5 with this solution:31687090 .why? How can i fix it?
Make sure you didn't enter in an infinite loop with your bfs.
Where Can I find Tutorials ?
http://codeforces.com/blog/entry/55362
anyone can help to explain why in second sample case for problem C. Slava and tanks can destroy all the tanks? The solution doesn't drop a bomb in 4th cell.
There are only 3 cells
Oh my bad, I mistakenly saw 4 as an input instead of output. Thanks
http://codeforces.com/contest/877/problem/C link not working . why?