<almost-copy-pasted-part>
Hello! Codeforces Round 642 (Div. 3) will start at May/14/2020 17:35 (Moscow time). You will be offered 6 or 7 problems (or 8) with expected difficulties to compose an interesting competition for participants with ratings up to 1600. However, all of you who wish to take part and have rating 1600 or higher, can register for the round unofficially.
The round will be hosted by rules of educational rounds (extended ACM-ICPC). Thus, during the round, solutions will be judged on preliminary tests, and after the round it will be a 12-hour phase of open hacks. I tried to make strong tests — just like you will be upset if many solutions fail after the contest is over.
You will be given 6 or 7 (or 8) problems and 2 hours to solve them.
Note that the penalty for the wrong submission in this round (and the following Div. 3 rounds) is 10 minutes.
Remember that only the trusted participants of the third division will be included in the official standings table. As it is written by link, this is a compulsory measure for combating unsporting behavior. To qualify as a trusted participants of the third division, you must:
- take part in at least two rated rounds (and solve at least one problem in each of them),
- do not have a point of 1900 or higher in the rating.
Regardless of whether you are a trusted participant of the third division or not, if your rating is less than 1600, then the round will be rated for you.
Thanks to MikeMirzayanov for the platform, help with ideas for problems and for coordination of my work. Thanks to my good friends Daria nooinenoojno Stepanova, Mikhail awoo Piklyaev, Maksim Neon Mescheryakov and Ivan BledDest Androsov for help in round preparation and testing the round. Also thanks to Artem Rox Plotkin and Dmitrii _overrated_ Umnov for the discussion of ideas and testing the round!
Good luck!
</almost-copy-pasted-part>
UPD: Thanks to ma_da_fa_ka, Jaydeep999997, abhishek_saini, infinitepro and socho for testing the round!
UPD2: Editorial is published!
......
Actually Mike's name is more common than others:)
This comment on a Div.3 round post is becoming the next common comment after
Is it rated?
..
vovuh sent this announcement when the contest is going to begin in exactly 30 hours:)
Still getting used to contests, can someone explain/link me to how the points and penalty system works?
Got it, thank you so much. So just to clarify:
Are these two correct?
nope..time always matters..even if you solved late your time will count..and your rank will be less than the one who solved earlier the same problem. and person with more solve has highest rank..that is right.
You are ranked by number of solved problems. If these are same then by penalty. Penalty is sum of minutes of solved problems +10 for every wrong submission of a finally solved problem.
A good explanation.
The participants are ranked by the number of problems they solved. However, if two participants solved the same number of problems, they are ranked by penalty (whoever has a lower penalty will be given a better rank).
For each solved problem, the penalty is the time taken (in minutes) from the start of the contest to solve the problem, plus 10 times the number of incorrect submissions (some types of incorrect submission do not count).
The total penalty is the penalties for each problem that you solved (Accepted) added up.
Note: If you tried to solve a problem but none of your submissions were accepted, then the incorrect submissions for this problem will not count in the penalty.
Thank you so much, appreciated.
Also, let's say there are two problems A and B, and you can solve A in 1 min and B in 50 min. If you solve at first A, then B your penalty is 51. But if you solve B, then A, your penalty is twice as big = 101. which is not very logical.
Absolutely agreed ! I believe Google and Topcoder marking schemes are more logical..
Yeah your logic is correct to some extent but there is a motive behind keeping such penalties.Suppose the system is changed as per your thinking then people who are ranked higher and are supposed to do 3-4 problems to stop getting negative delta, will start solving the C/D problem first and if they are not able to get logic for the problem in less time, they might not submit anything and escape the negative delta.(no submission in a contest counts to non-participation).
This type of penalty system almost ensures that contestants don't do that!(but still many contestants do C/D first.)
every wrong submission => penalty . this applies to the first submission too ??
yes.but submissions wrong on examples -0 penalty.
Good luck to all the participants. It's a really good opportunity to become an expert.
Thank you CodeForces for increasing the contest frequency!!
pfp buddies XD
Senjougahara best girl
I have to disagree on that part
Yes. I am having a much better time coding now.
This will be the only meme I've posted so far.
And this meme too.
I hope that this contest can have a wider range of questions. In the last round (Rd 641), I personally think that the problems are too math-based. I believe that a good contest should test contestants in different regions of programming, such as dp, constructive algorithms and etc. Hope this contest can be educational for div 3 programmers and being competitive at the same time!
That sounds good but lots of contests before have already had what you need. I think we should have more mathletic problems because we are having too few. (sorry for my poor English)
I run out of memes
Will become a meme for sure
XD
good meme tho, +1 for me :)
lets hope that the questions don't emphasize on number theory in general a lot...
TBH number theory is fun.
No all participants are computer science students. I study aerospace engineering. So I prefer simple math algorithms like euclids GCD, DFS. But not some special, not well known property of prime numbers or modular division. There should be seperate mathforces round.
Thanks! for round. Hope it will help.
One Question .... what are things we should do in college to get a good placement.... Some people tell me that do CP...because at the time of Interview it helps lot....But i have one doubt..We also have to do projects ? or to do only CP..and improve it....And if we have to do projects what are the right time in a 4 year B.Tech course...to do projects.... Please answer this Question it helps me a lot..to prepare my strategy for further Two year... i'm in 2nd year now..... Thanks in advance//
You need two or three good projects on your resume so that interviewer have something to discuss with you in the interview.
It also varies from company to company. Some companies judge you on the basis of your approach for solving cp problems and some will judge you on the basis of your work and understanding of the projects in your resume.
But in the end to reach face to face interview rounds you have to clear initial coding rounds first. So cp is important for that part. If you can solve div2 ABC level question than clearing those initial coding round will be easy for you.
Hopefully this will not happen to me again :(
deleted
deleted
deleted
deleted
Let's hope to rank up after latest Div2 round
is it rated for unrated participants?
Yes, because there must be some contest where somebody can get his first rating.
I have a general doubt:
If there is an update in the problem statements and I am giving the contest in m1.codeforces.com, will I get the notification?
Yes, you will get the notification about updates in the problem statements.
I never got in m1.codeforces.com
Wow! Next four days three CF contests and many more to come. Thanks CF.
Rounds in this time of selfisolation like a water in desert...
Struggling a lot to become a specialist. I crossed 1380+ three times. but couldn't reach 1400. I hope this time, I will make it to the 1400 club.
When you reach specialist, what will you do?
Will try to become an expert ;-)
Long queues Mike, w@#k happened again ?
Deleted
HP21 this comment will be more noticable by them if you tag them. I think you didn't tag them.
Why aren't contest hosted on weekends more often? I mean, some of us have no opportunity to compete from Monday to Friday, 'cause you know, we work on those days.
Agreed. At least one contest on weekend would work.
Thank you Codeforces for increasing the contest frequency ^_^
A say home stay safe.
deleted
(I mean, why you guys downvote this? This is nothing so can't you just ignore it?
Anyway this was a crap meme and I decided to delete it...)
KSI <3
I hope that problems will be based on Data structures.
Codeforces is surely the best platform to practise CP
.
Vovuh and Mike's Div3 never lets me down. Also I am lucky to never cross 1600 and participate in all their rounds.
In my personal profile my rating has changed. But when I am checking my rating in organization section, my rating is as it was in previous contest. Why?
Can anyone explain the rating system or the link of previous discussion about rating system(latest) ?
You are ranked by number of solved problems. If these are same then by penalty. Penalty is sum of minutes of solved problems +10 for every wrong submission of a finally solved problem. Copied from : spookywooky
How much is the importance of knowing algorithm for Div3 and which ones I should know?
dp, greedy, dfs and bfs, simple math and implementation, and binary search. Also, you should solve problems fast.
Thank you <3
Do not copy me and be creative :)
although I am in div2,usually I cann't fully solve div3. So why cann't I be rated in div3? Maybe we can drop 2 easy problems and append 2 harder problem to make div3 also rated for div2.
div3 with 2 harder problems == div2
Just stop after having solved A, then you might be rated next time!
If you have questions like this, ask the jury.
It's forbidden to talk about these during the contest.
Beautiful problems and straightforward statements... thank you! Also, first time being able to solve E :)
Can you give hint on $$$E$$$, I am out of ideas!
Hint:we will use dynamic problem to solve this problem.
Let's denote the input array by
s[1...n]
.Let:
dp[i][0 / 1]
— be the minimum number of operations you need to perform in order to make the arrays[1...i]
k-periodic, considering that you let the i-th bit as it is (dp[i][0]
) or that you've changed it (dp[i][1]
)cnt[i]
— be the number of 1's in the arrays[1...i]
Let's talk about the case when
s[i] = 0
...If you don't change this bit, it won't affect the periodicity of the array
s[1...i]
, so you can take the answer from the previous subproblem:If you change this bit, then you may have to make additional opperations to assure the k-periodicity property of your
s[1...i]
array.The first option is to turn off all the
1's
from0
toi - 1
:The second option is to turn off all the
1's
fromi - k + 1
toi - 1
and continue building your answer based on the subproblemi - k
, considering thats[i - k] = 1
.In case
s[i - k] = 1
, then:In case
s[i - k] = 0
, you have to change that bit, as well:In the end,
dp[i][1]
is the minium beweencnt[i - 1] + 1
and one of the two last cases.Now, consider a similar strategy when
s[i] = 1
...In the end, the answer will be:
I apoligize for the poor editing skills, I am not used to how editing comments works on this platform.
Highly appreciate your comment, thanks a lot!
What could be the test case 2 of problem-E?
For sure it is a test case that takes into consideration the fact that sometimes you can stop at some character 1 in position i and just ignore the rest of the string. I took this case into consideration to pass the test case 2. But of course to do this you will have to "pay" a price which is the amount of character 1 after the position i.
How to solve E ?
You can solve for each index mod k separately. Now replace '0' by -1 and '1' by +1. Find segment with max sum, can be done with Kadane algo.
@Len how did it strike you that we need to take maximum subarray sum? I almost spent an hour thinking about it. Could not write dp solution because I am not good at dp :(
Is it going to be hackforces?
Is there easier way to solve D beside divide and conquer?
Using Heap...Maintain max-heap for the length of segments simultaneously with min-heap with a lower index of the segment.
I did this but isn't there any solution without heap
You could put all the segment on a standard queue in right order. But this is surely more complecated than simply generate them, and then sort them.
How to solve F, thanks.
Notice that sum(n) <= 100, sum(m) <= 100 constraint. There will be at least one cell that is not changed. So if you fix that cell, you can determine what value (i, j) needs to be. The rest is n * m dp.
Can D be solved using heap? I kept getting TLE on test case 2. Using a priority_queue<pair<int,int>> where the first element is the size of the segment and the second one the starting point (times -1 because of the order needed)
Exactly I did this. Luckily it passed for me, have a look at my submission: link
Thanks! Glad to know that. If you want to debug my code ^.^: link
Hey, you are popping the current pair from your Heap, after adding the two new segments(pairs) created! So, basically, your code won’t do, what you are intending to do. Just put the “Heap.pop()” line, above the two “Push” lines and a limit condition for adding the two new pairs, and your code will work perfectly! It is giving TLE, because the pop and push of pairs, isn’t in correct order, and hence, you are visiting the same segment(s) more than once, which won’t empty the queue, in any case, and then the loop will run infinitely! Also, you have to put up a condition to add the new pairs(segment(s)), that will be created, after replacing a “0” element with “i”. Else, your code will add two new pairs every time, and hence, your queue, will keep getting longer and longer!
I have solved using a heap. You can see my code.
You should pop before you push. Because pushing an element may change top of priority_queue which will result in poping unwanted elements.
Secondly on each iteration you are pushing two elements and poping 1 element. So size is increasing. As a result your queue is not going to be empty in near future. You should apply some condition for push so that size doesn't get too large.
What's the score distribution? Are all problems worth the same in div 3? Thanks!
yup
What was the test case 2 in E ?
check the default case like string with 1's count = 0 or 1
Test 2 contains all binary strings of length from $$$1$$$ to $$$10$$$ with all possible values $$$k$$$.
Was there a simpler approach to solve D which doesn't use priority-queues/multi-sets ?
Nice round! Well written statements and interesting problems.
Hey guys, I'm new to this platform and this was my first contest. What does the "open hacking phase" mean and when do I find out if my rating increased?
Now you can see other peoples' solution. If you see an accepted solution will not work for a specific input then give that input and hack that solution.
After hacking phase there will be system test. After that rating will change. You may need to wait about 14-15 hours for your rating change.
Is this fair? @vovuh @MikeMirzayanov
Kindly ban this user who is using multiple handles and hacking one account using the other account-
mamun360 and 550mamun
https://mirror.codeforces.com/contest/1353/submission/80148191
https://mirror.codeforces.com/contest/1353/submission/80124724
Happens all the time ..also there are no extra points for hacks so chill
Also his rating is trash anyways so who cares?
Hi guys can I ask about problem C?... I have problem working with big numbers in C++. I'm sure I have declared m, n, and sum to be long long or int64_t but eventually it cannot calculate the correct number to add to sum, and at the end the answer is wrong.
Code?
Previously I simply add the new value to sum but as I see it didn't work out I used a temporary variable to hold the value and unfortunately it is still not working
I think that this value j*j*2*4 may overflow before the casting. Try to do ((int64_t)j)*j*2*4
lol no shit how could it be like this it worked man. i don't know yet why and how but thank you for this i'll try to understand
When C++ is evaluating an arithmetic expression it holds temporary values on variables of the biggest type involved in the expression. In this case the biggest type is int.
Notice how you cast into an int64_t AFTER you do the operation. However, since all j, 2, and 4 are integer values, the value inside the parentheses will overflow.
Try
temp = (int64_t)((int64_t)j*(int64_t)j*(int64_t)2*(int64_t)4);
and it should work (this is very explicit, the following also works(int64_t)j*j*2*4
).Thank you guys this is phenomenal this will help me overcome a shit load of other prroblems. I've always been shaking my head when I see a casting problem, and having to deal with big numbers in C++. I will forever remember this.
The biggest value that can be generated by some input is 125000000000000000 ( actually this value is a little bigger than the biggest value that can be generated by some input ) which fits into a long long int variable.
I'm fully aware of this but for some reason the result for the last pretest input is 6229295798864 and not 41664916690999888
Can anyone help me understand why this code is throwing runtime error. https://mirror.codeforces.com/contest/1353/submission/80152681
https://stackoverflow.com/a/37281043
I don't think that's the issue. Or can you elaborate a bit?
Yes https://mirror.codeforces.com/topic/74563/en2 see Attempt to dereference a singular iterator
That's exactly what your do
Don't erase your iterator before using it
Try to first get the values from the iterator before you erase it.
Hello, good time MikeMirzayanov in this submission look like guy who hacked it create 2nd account for it and submit an code that have a bug for hack it with him/his 1st account submission: https://mirror.codeforces.com/contest/1353/submission/80164801 bug is this part: if(n==165) { cout<<n<<"\n";
It's cheating!
Has anyone solved D using recursion? I tried but got WA. Any help would be appreciated, because that's the first thought that came to my mind after spending sometime on the problem.
Yes, I used a recursive approach to solve the problem. However, instead of using the built in computer stack, I used a priority queue.
See my AC submission for more details.80164051
My solution for problem F is essentially O(N^2 * M^2), and unsurprisingly it is slow (but it runs within the time limit luckily). Is this the intended time complexity, or is there a solution which runs in O(N*M*(N+M))?
Here is my code, 80169304.
Lol. At least it got an AC.
80141105 was the only soln is python which got accepted in the contest.
Only one soln in python is accepted so far 80171692 credits pajenegod.
TL;DR; vovuh Just don't enforce long ints in div3 just for the sake of it.
It's just a Div3 problem. Using ai up to 1e15 just makes it very difficult to get AC in python. Integers >=2^31 just makes python too slow on 32bit codeforces. This 1e15 doesn't make the problem interesting, but it just messes with python.
Don't you think that I set such constraints for safety? I don't know if there are some $$$n^2\sqrt{a}$$$ solutions which can get accepted, but even with $$$a_{i, j} \le 10^9$$$ the answer doesn't fit int32. So I could make $$$a_{i, j}$$$ up to $$$10^7$$$ or maybe even less, and what then? Maybe with this constraints there are $$$n^2 a$$$ solutions which can be good optimized? Do you know? I don't. But they can be.
It is not a surprising fact that the last problem of Div3 is something like Div2C-Div2D. And anybody knows that Python's speed sucks. And anybody knows that C++ is the fastest language and some problems are just not for Python. I know that this is Div3 but if the participant can solve the last problem then he need to understand that the solution written on Python or PHP or Ruby or other slow languages could not be accepted.
Here is how it works with PyPy. 32 bit PyPy (which is what codeforces uses) is able to work efficiently with small integers (corresponding to C long) and with floats (corresponding to C double). So normally when I need performance for say a n = 1e6, A[i] <= 1e9 problem, I can just use floats (which have integral precision <= 2^52 approx 4.5e15). So in the case of today's F, had max been 1e13 instead of 1e15, I would have had a much easier time.
In general I get that there are problems where it makes sense to involve large integers. However this problem is one where I don't really see the point of making A[i] <= 1e15. Just the usual 1e9 would have worked just as well.
Well, I already said that we don't know if there are some non-intended solutions which can get accepted if $$$a_{i, j}$$$ could be up to $$$10^9$$$. Moreover, I didn't know anything about PyPy background so I couldn't imagine that something like $$$10^{13}$$$ will be better than $$$10^{15}$$$ in this problem. I said that I set such constraints to make the answer fits in int64 datatype (even more, make the answer significantly less than $$$10^{18}$$$ because a lot of users uses $$$10^{18}$$$ as 64-bit infinity) and cut off all possible bad solutions.
Also, my point about using faster languages for hard problems, remains. I checked a bit of your submissions and see that some of them are tightly fits the time limit so I think you knew that PyPy can be very slow in some cases. I agree that I could make the constraints better but, from my point of view, I didn't see significant reasons to do that.
This is also my bad that I didn't write the Python solution and I'm sorry that I didn't do that and didn't check how it fits. Anyway, I cannot do anything with it right now.
We know just wanted to point it out for future div3s.
Those are someone else's submission. He asked him why he got TLE on that and how to improve it. Pypy3's IO is slow same soln written in Pypy2 will run fast. His in contest soln takes Time Limit/2 except for this F.
On a side note, he knows Python is slow but he also knows a lot of cancers in python.
As you can see, my previous reply was to pajenegod so I talked about his submissions.
The last thing I want to say in that discussion is: I hope nobody forgets that the competitive programming is about efficienty. And slow languages are completely don't about it. Don't you think that we need to learn newcomers that cp problems need to be solved efficiently? If we don't do that there, then after reaching div2 they'll stuck on anything because any algorithm or data structure in such languages is about 10 times slower than in Java or C++. I think it's better for them to understand that slow languages are not good for solving hard problems as soon as possible. Moreover, 5 out of 6 problems were python-friendly, so I don't know what else to ssy. My point of view is just different.
Just to clear confusion here. You misunderstood my last comment.
I was talking about pajenegod's submissions which you said were slow. Pajenegod's in contest submissions takes less than TL/2.
Someone wrote that slower code and asked pajenegod in AC discord server for help. He submitted that code.
Anyways let's stop this debate here. It can go long. Its completely upon you how many problems you want beginners to solve. I completely agree that one should choose the best tools. We just wanted to point it out because next time we may have a similar problem with easier problems. These days you try a lot to make easier problems slow languages friendly (Thanks :) ). If one looks at recent div3's he can clearly see are a trend that constraints of easier problems are set in such a way that slow input-output languages don't get TLE.
I am trying to learn C++ as I usually use Java. I had a question regarding DP problems in C++. Often, a vector cannot be used in recursion, so is an array preferred? I was thinking one way to still use a vector is to give an initialize max size so we can treat the vector as an array and access indices but is initializing a vector with a specific size really slow (I used a vector with 10E6 size and TLEd)?
Furthermore, if I do use an array, how can I initialize all elements to a value as
fill_n(begin(dp), size, INF)
gave a run-time error.Thanks!
Why a vector "cannot be used in recursion"? Or asked other way: What can you do with an array what you cannot with an vector?
Can someone please provide the solution of Q4 i.e D: Constructing the array in python or probably pypy3?
Using Heap...Maintain max-heap for the length of segments simultaneously with min-heap with a lower index of the segment. Code
it was very helpful thanks
hey i have not submitted the code yet but can this solution be acceptable ,i have done this after seeing the editorial but i am not sure it will be accepted or give TLE I will also submit the code once system testing is done code is here
Even after System Testing, My code is ACCEPTED. That means NO TLE.
Hey, I'm new here. It was my first contest. I solved A, B and C. Curious to know when will my ratings be updated. It's still not showing anything on my "Contests" page.
Be patient, it takes some time.
Div.3 contests have an open hacking phase (12 hours) followed by a system testing for all submissions. The ratings will be updated once the system testing is over. It may take some time, however, even after system testing is finished. Welcome to CF!
MikeMirzayanov ,Sir I am really sorry for the miskate which I did in last round Div3( round#642). I already logged in my old account and I submitted 4 problems then suddenly I realized that this is not my current and permanent account then I resubmitted all the 4 previous problem + one more problem E in my current account not in old ones. Sir please look at this situation. Both are my own account and It didn't happen intentionally. please don't skip my solution all solutions are my own. I promise that it will not happen again in future.
Why did my rating fall ? It was supposed to be increasing by +16 according to cf rating predictor ? Can anyone tell me the reason ? Thanks in advance .MikeMirzayanov
vovuh MikeMirzayanov
I made 25 MLE hacks using pajenegod's test case which TLEed my soln 80141105 . I see ratings got updated but I can't find that test case in system tests (same soln passes 80201283).
Since ratings are updated and only 3 test cases were added in system tests.
Question 1. Is there a system testing phase in Div3? Or if nobody hacked you mean your soln is an AC.
Question 2. If there is one then why was this hack ignored?
26 solutions were hacked using this test case among 127 successful hacks in the round (more than 20%). Shouldn't this be a sufficient reason to blindly add this hack in system tests?
Bunch of people wrote O(n^2*m^2) soln both in time complexity as well as memory complexity. While time complexity is correct. 256MBs don't allow you this much memory.
Hacked solns were as follows -
DP[i][j][x] is minimum no of operations required to reach i,j if a[0][0] is x.
There exist test cases in which no of distinct minimums on path 0,0, to i,j is O(i*j). These solutions require O(n^4) memory in those test cases.
(https://mirror.codeforces.com/contest/1353/submission/80129435) follow for C
Does anyone know why this unusual time?
contest was bullshit=))))