Hello! Codeforces Round 677 (Div. 3) will start at Oct/20/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!
UPD: Thanks to infinitepro, nuipojaluista, MrReDoX and Peinot for testing the round and giving the feedback about the problems!
UPD2: Editorial is published!
vovuh orz
is it rated?
It is mentioned clearly in bold. Rated for users havin' rating less than 1600.
Understand the sarcasm bro he is a cm with 2 year experience
I know but now a days this question is the source of decreasing contribution.
If i hurt you then please forgive me
There is nothing to get hurted. I be happy with Coding.
Not for >=1600
Any idea why are problem ratings not getting updated for the past three contests?
3 days always
it's been 8 days since the last edu round and problem ratings for those problems are still not out
imagine 8 problems for a div 3 ...
About 50 minutes after this announcement was published, the user MikMirzoyanov posted a fully copied text of it. Unfortunately, it is only in Russian. However, he almost immediately replaced it with just a call to participate in the round. But still, it was really strange.
Vovuh rounds are best to learn math, implementation and constructive for a beginner like me as I can hardly solve up to D in Div 3 rounds.
I have 3
I wish one of them reads your comment :D
I have showed one of them the message and put her reaction on youtube today. Can watch here
That's a pretty solid reaction :O
Maybe thats why you are newbie XD
Destruction XD
did you decide to bring in the problems from the next div3 contest to this coming one ? cuz there are eeeeeeeeeeeight problems ! o_o
Where is it written that there are 8 problems?
On the first line "You will be offered 6 or 7 problems (or 8)..."
So how are you saying that its 8 ? it might be 6,7 ?
I will try my best to solve problems even though i suck at this, i wont give up i believe that i can improve :).thank you for this div 3 rounds
Come on!Just make progress togather!
*together.
![ ]()
meanwhile couldn't increase rating in my last 3/4 div 3.. :(
Note that the start time is usual.
I first read it unusual and scrolled up to verify the timings..got confused..came down and then read it correct.
Has it been confirmed anywhere that the number of problems in the contest is 8?
[]
Bro i can feel this meme.
Please this time wanted SHORT statements and a STRONG pretests for DIV3!! Interested for the contest hope to get expert this time (done lot of practice indeed) !!
Too ambitious to be true
See you on the other side.
what is meaning of pretest ?. have been encountering this for a while but don't exactly know what it means.
several testcases that are used during the contest, they are usually less than the original testcases, I think they do that in order to reduce the queue time
Hello everybody, I have a question that might seem ridiculous to you but as I am still a pupil I think it is ok to ask it. When inputs are like 4 3 2 4 6 2 7 9 4 and 1 2 3 4 Should I use cin differently? I mean in the first, there is a number in first line, and then 4 numbers in the other lines, but in the second one there is only one input number in each line. Thabk you in advance for your help.
The comment did not share well. but it is like the first line: 4, second line: 3 2 4 6, third line: 2 7 9 4. and the other one, first line: 1, second line 2, third line 3, and etc.
Above the editor box are some icons, try them, they wont bite you. Look out for "Block" and "Inline".
no you can use cin as it is, and you can also verify it by actually trying it out
I do not want to give unecessary pressure, but you know you are expected to make a big jump back to blue today, don't you?
yep, that's why I initially decided to not attend,because of pressure,then I thought chuck it!Iam in
Wait !! I also want to be a tester. Someone knows how it is possible ?
simple!! Be friend with problem setters ...
26 minutes left time to be ready : )
Are these tester comments trendy presently?
Either way, here are my views on the contest.
Nevertheless, a fine problem set for a div3. Good luck and have fun!
Good luck everyone
Will solutions judged again after contest finised?
How can a participant be a trusted participant ? because on contest it shows me in unofficial standing ? and i'm just a newbie
you need to take part in one or two contests to become a trusted participant.
Hope this round will remain rated :)
Sigh. I solved A and B in under 12 minutes but couldn't solve C in the next 2 hours. There must be something wrong with the way I am practicing.
I used to be really bad for the first 2 months, today I solved 5 problems so don't give up and keep practicing. Unless you're doing problems below your current level, there is no wrong way of practicing.
Meh, it happens, there are days where I fail to solve problems rated 200-300 below my current rating in contest. Don't be troubled by it too much. Rather analyze where you went wrong and what you can do to improve on it in the future.
Yeah I coudn't solve B and C at all after solving A in the first 5 minutes. For B i kept on trying to simulate the process but kept on getting WA. Is there a better way and are there other questions that are similar to B?
My solution to B was just (the spread of the ones)-(the number of ones) assuming the ones are not already stuck together. Eg: For 0010101, 5 — 3 = 2.
Why is this true?
Hope Mike won't plag me today again xD.
What about D & E
was for solving D any knowledge of graph theory need??
and what is the procedure of E
any one tell me please the procedure of this two problem.
E was simply (C(N,N/2)*((N/2 — 1)!)^2)/2 AND FOR D no just make a star graph.
i don't have any knowledge about graph that's i ask is there any other process to solve that
would please explain E to me?
See number of ways to pick N/2 people is C(N,N/2), where C is binomial coeff. Now to arrange them in a circle such that each time a different circle is formed is given by standard formula of circular permutations which is (no of objects — 1)! Here no of objects = N/2 and since there are 2 groups both of them get multiplied to get total number of ways hence a square in the factorial term. Now multiply this with our C(N,N/2) and you are almost done! Also you need to divide by 2 since you also chose the reverse order in the process.
For D you can make a star graph by connecting all the non equal elements wrt center of the star.... to the center of the star and now only the elements having value equal to number in center of star remain. Connect these elements to the to any other vertex of the star other then the center and you are done. Answer is always YES if atleast 2 distinct elements exist.
I was thinking of a birpartite graph with coloring, but it wasnt, just search for a pattern.
D: Knowledge of bipartite helps in a way. If all numbers are same then answer is NO else YES. Then you can join first node to all nodes which don't have value a[1]. For other nodes having values a[1] connect them to any one of the nodes having value not equal to a[1].
E: I just did OEIS. Too weak in maths. ;_;
anyone else solved E using OEIS?
Problem E
Did you?
I was tempted to but the derivation was actually pretty easy.
When I'm given a number like n=20 is 12164510040883200 I just can't resist going for OEIS. Never even read the problem, I just went directly for OEIS 96121869.
Then Codeforces kept showing me popups over and over about announcements about issues with the problem description. My secret to success was to never having read the problem description in the first place xD
How do you search in Oeis? You just put 12164510040883200 in the search bar then choose first result that comes? or what?
I just searched for
1260 12164510040883200
and scrolled down until I found what I was looking for (the sequence in E turned out to be the 2nd search result).You can read about different ways to do searches here. You can do for example this (shows all sequences containing
1
,3
,1260
and12164510040883200
) or this (searches using wild cards).I did the same :D O(OEIS) https://mirror.codeforces.com/contest/1433/submission/96137379
Lol. The sequence you used is "Complexity (number of maximal spanning trees) in an unoriented simple graph with nodes {1,2,...,n} and edges {i,j} if i + j > n" which has nothing to do with the problem, but just by coincidence happens be described be the same explicit formula for even $$$n$$$.
I tried searching with this
1,3,1260,12164510040883200
but it shows no result. Help pleaseComma seperation means you search for exactly
1,3,1260,12164510040883200
appearing in the sequence (in that order with no numbers inbetween).This contest is a nightmare for higher specialists, many solved 5 still their rating will decrease.
Yeah, it was a nightmare but we can jump back in next contest right?
Good Luck for next round
yesss...
When your Spanish teacher calls on u 10 times in the first thirty minutes of the contest even though u never raised ur hand. Tough.
Anyone know? Which formula is answer of E problem?
((n-1)!)/(n/2)
$$$(n-1)!/(n/2)$$$
It is "(N-1)! / (N / 2)" but I have no idea why
As me :)
I just found out that half of people did it with OEIS, how could I have forgotten...
Same here, I know OEIS but I also forgot.. Just kept scratching the paper.. lol
What is OEIS ??
ll ans = nCr(n, n/2) * pow(fact((n/2 )-1), 2)/2;
First calclulate number of groups possible (of half members each) by
nCr(n, n/2)
, then use formula of circular permutation i.e.(n/2 -1)!
to find number of ways to arrange people in a group.(n/2 -1)!
*(n/2 -1)!
would give the ways for both group. Now divide the product by 2 as there be would be possibility of group A,B and B,A.eg.
n = 8
, ways to make group of equal people =8C4
= 70 AND ways to arrange people in one group =(4-1)!
= 6 AND ways to arrange people in 2 groups =(6 * 6)/2
. Final answer =70 * (6*6)/2 = 70*18 = 1260
edit: And we can simplify this to the formula many people used, although I took too much time in D and could not submit E in time
What were the solutions to F and G?
If Div3 is a contest in which we'd like Div3 participants to solve the entire set, this seemed like the perfect one.
I dislike problem E because it felt easier than B (to me and maybe others too considering the number of solves). F seems pretty easy if the constraint of
M/2
is omitted and we're supposed to find maximum sum divisible byK
in each row. How do I stay within the constraint? I'm thinking 3 state dp maybe. Any ideas on how to solve G?For F, it is simple to reduce that difficulty in your idea, do an auxiliary dp for only col counting the state for checking M/2. Extract optimal and use it to update main dp.
I looked up your solution after you posted the "Why would you give a problem...." comment. It's very elegant. Understood, thanks!
First time solved 5 :) and spend 1 hour in F but not able to get AC.
I think the tests in Problem F are weak as printing the maximum sum minus (maximum sum) % k is giving Accepted.
How is second test case for G giving 13 ??? shouldn't it be 16 by reducing edge (2,3) to zero????
They took a path which wasn't in any of the shortest routes. After making it 0 it became a part of the shortest routes.
$$$E$$$ — OEIS
Can someone tell me how to use OEIS, especially when I don't know the whole sequence(contigous sequence) of numbers.
for this problem, they gave the answer for 2, 4, and 8 so I just find the answer for 6 manually and then search that series on Oies.com, it simply gave me a formula which gave me AC
Use underscore, like for the given problem you can search something like 1, 3, _, 1260.
Why would you give a problem like F in a serious contest?
To be fair I don't think any significant number of participants < 1600 rating would have come across the idea. Anyway Div3s are fairly educational in nature, E / F is often a problem which can easily be condensed to a standard idea.
Yeah, but F should not be solved by 250+ peoples if we see the other div3s. And yeah, it was educational. I was getting struck in implementation with fake updates cause I initialized everything with 0. Probably that's why they put it in F.
But, a lot of people dance between blue and cyan so this probably gives unfair advantages to them.
Yeah fair enough, maybe the idea is more common than I realize. I just felt that way since I didn't actually come across this idea till I was around 18-1900.
Can anyone tell what's wrong in my code for D?
my approach: if all elements are same, then answer is NO,
else find the min element index, find the max element index. bring the min element to first index, and then print from second index with following condition.
if arr[i]!= minimum element print i min_index (i.e. i 1) else print i max_index
UPD: got it. I was changing index's value.
There is always a problem which doesn't allow to increase rating. This time it is F.
I want to know if anyone bothered to simplify the answer of E to
(2*(n-1)!)/n
.You can't simplify it further. It's a factorial. Maybe you could write the mathematical notation to make it look clean but that doesn't help programmatically.
Solved 3 problems for the first time, Is this round easier than usual or have I improved?
Search 12164510040883200 on OEIS, and you will find the answer in the first sequences of the searching result — A110468
You could have simply chose to not post that. I feel incredibly stupid now as I calculated it for every n using the formula and wasted more than 30 min :facepalm:
A lot of people solved it by hand. There's nothing to feel stupid about it. I did it too (although I took only 10-ish minutes proving at 3-4 implementing). Although those who did search for it are at a slight advantage in the contest, it's insignificant over many future rounds. At least you were able to prove why the formula is correct and not blindly copy it from elsewhere.
It took an Eternity to understand E :(
Anyone solved the problem D using maximum spanning tree where
weight = abs(a[i], a[j])
?You can solve D using basic concept of MST. Instead of using Priority_Queue, just a normal Queue will help you getting out of TLE. https://mirror.codeforces.com/contest/1433/submission/96110388
Can someone explain E?
1- you want to know how many times you can divide n people into to n/2 teams. The answer is nC(n/2). But, for every time you choose a n/2 number, you leave another n/2 (aka you choose them too into a different team). So, the answer will be nC(n/2) / 2.
to give a quick example, say n = 4. One way to choose 2 people is [1,2] (which leaves [3,4]). Another way is to choose [3,4] (which leaves [1,2]). They are both the same. So, we divide by 2.
2- For every team, you want to know how many times u can rearrange it (without changing the members) to form a different team. this is basically (n/2)!. Realize also that every ordering will be repeated n times. for example, [123], [312] and [231] are the same. so, it's (n/2)!/n.
So the answer is nC(n/2) / 2 * (n/2-1)! (how many times we can reorder the first team) * (n/2-1)! (how many times we can reorder the second team).
I hope this helps.
Yes now I understand. I was able to get the first part but could not find the number of possible arrangements in each team.
Basic idea of problem C (atleast what I thought): The dominant piranha is not present if all elements are same. Whenever all the elements are not same, there will exist one or many piranhas with the greatest weight , one of these must have a neighbour which has weight less than maximum value ,that index is one of the answers. But my code gives wrong answer, Clearly there is a silly mistake in it , It would be helpful if someone could point it out my submission
Your bounds checking is wrong. Index should be less than n — 1 for checking to the right not n
Sorry for you bro , it was just a little bug
Thanks for pointing it out. I will never ever make this error again.
Got it !
Someone explain solution for F pl.
Let's cald dp[n][m][C + 1][j], where is first two are position of current element, C — count of taken element it that row and j — remainder of divison of k.
kuzma can u explain more please thank u
You can take a look at my code. There are some comments that might help you understand.
I somehow get to manage the formula for E (only god know what logic I applied.. actually I tried to fix random factorials lol) but dont have a intuition for that. Can someone please help me with the intuitive proof for the same ?
Can anyone please help me by telling that where my code is failing for B, I am unable to find it. Code
How to submit all problems at the same time without a gap of even one second ?
Open 6 tabs and you can submit everything under 1 minute. Seconds aren't counted.
There are various tools that allow you to auto-submit problems directly from your text editor / ide / the command line.
Example — cf-tool]
Thanks got it!
I think it is formatted as HH:MM.
It is without a gap of even a minute.
He is a red coder he can do anything ;)
If he solved it all in 1 min and 7 seconds, he would be first on the ranking.
No, only trusted participants in the ranklist
how to do b?
Number of zeros between first appearance of 1 and last appearance of 1.
too many people solved too many questions ;-;
Just google searching the output to the last sample on E (
n=20
) leads you straight to https://oeis.org/A273878.Getting answers from OEIS after typing out a series is alright, but with just one number, that too which is given in the sample, is not.
I hate OEIS...I solved it with a smooth PNC method and got it right 3 sec after contest ended :(
please tell what is wrong with my solution it is showing run time error with exit cod=2147483647 https://mirror.codeforces.com/contest/1433/submission/96165473
You rec function is not returning anything
Authors tried hard so that formula for E do not reveal directly , but "a ninja must see through deception" :) . Nice problemset.
Amazing problems. Thanks to all the testers and problem setters for wonderful problems.
What an absolute stupid contest! No thinking, no DS, nothing. Just some stupid observations and you're good to go. Why do you even frame these type type of problems? Just say like — Print numbers from 1 to n. It will be a lot better to solve. Seriously, even Leetcode contests are better than these contests, atleast they require some thinking and implementation, and DS. But here, just put some if-else conditions in problem D which is supposed to be a good problem, and you're done! Absolute waste of time and effort.
How can you say you didn't even participate in the contest?
(Reminder) One can use multiple ids in cf.
And how would you suggest they add ds without making the thinking part practically non-existant? Any even slightly tricky data structure will easily push the question over 1900 difficulty.
You should participate in Div 1 ;)
What is the intuitive proof of E ?
There are cnk(n, n // 2) // 2 ways to split people into groups of size n // 2
Now there (n — 1)! ways to arrange people inside each group
$$$F$$$ was awesome :).
then please give me some insight to solve it, how you started thinking about it and how it end, please if you can
such a good div3 round !
in open hacking phase, is there penalty for Unsuccessful hacking attempts? if i hack someone, will i get points or something?
No
No penalty. No points. You get a mention in the edits of this post if you are among the top 5 hackers.
Edit — No mention about top hackers in Div. 3 posts.
Problem E had only 19 possible inputs and you give 4 of them in the samples?!
I think Codeforces is advertising OEIS.
No, it is guaranteed that n is even, so there are only 10 inputs
actually 11
actually 10 (2, 4, 6, 8, 10, 12, 14, 16, 18, 20) :P
UPD: Fixed
You missed 18 and made it 9 xD
Crap Difficult math
what is the solution of D?
Maintain a count for how many cities are under a bandit gang and indices (using map preferably). Connect all other gang cities to one city.
Example: [1,1,1,2,2,3,3,3,3]
Counts: [1: 3], [2: 2], [3: 4]
Now, connect all cities under gang 2 and 3 to one city in gang 1. For the two remaining cities under gang 1 (notice 1 city of gang 1 is already used up in previous connection), connect them to any other city distinct gang city. Implementation is simple.
Can someone explain me why this output gives WA for 1433D - Districts Connection in the first test case:
My submission : 96170947
I also didn't understand the verdict.
1 1000. You have to print the index, not the values.
I think you answered someone else's query in my comment :3
No, I saw the participant's output for your submission, for 3rd case, it has one extra output line 1 1000, the checker was expecting a string "YES" and you provided space-separated integers.
Thanks man, got the problem. I was searching wrong in 4th test case.
1 and 3 is wrong answer
The biggest piranha can eat all other piranhas. So 7 at index 1 can eat everything else. However, 4 at index 3 (what you say) can not because it will only get to size 6 after eating piranha with size 1 and 3 and it can't eat 7.
Initially the pirhanas are 7(indx1) 1(indx2) 4(indx3) 3(indx4).
NB: don't be confused. 1st element's index is '1' not '0'.
if your ans is 3 that refers to index 3, that means the pirhana of size 4 will be the last. But it will become 6 at its peak which is still smaller than 7. So ans will be for 7, so ans = 1.
Felt todays contest more inclined towards fast speed rather than logic building :(
Yep, Div. 3 is hard for those familiar with OI mode contests (where speed doesn't matter as long as you get the points)
I am getting TLE in F. Can anyone tell me how to improve it?
Complexity of solution: n*m/2*n*m*max(a[i]) Edit: Link updated
Edit2: Used the above approach with modulus for removing unnecessary values and got AC and also complexity becomes O(n^4)
Can anyone give me the tutorial of F please ?? ACtually i need the explantion of any solution approach
My solution was hacked too :p :p
Why so many hacks in F? What is the hack case?
I think people used greedy in dp.problem.
Nah, I used DP still got hacked. Not sure about the testcase though.
Ic My rank is 23 still didn't got hacked yet.
try
2 2 4 1 1 1 2
ans = 0
That stupid fake updates.
Lesson from Problem F: Don't be greedy. Be dynamic.
Test for problem F 2 2 4 1 1 1 2
ans = 0
Yet another HackForces?
I don't quite understand question F. This is the code of WA in my game https://mirror.codeforces.com/contest/1433/submission/96164623 This is my AC code after the game https://mirror.codeforces.com/contest/1433/submission/96173437 The only change is that I changed MAXM from 70 to: int MAXM = (70 / k + 1) * (70 / k + 1) + 5; if (MAXM <140) { MAXM = 141; } Although there may still be a problem, it is ac for the time being. (I guess if MAXM is set to 4901, it will definitely be ac, but it will time out), I don't understand. According to my understanding, the total status will not exceed 70. How is this going? Is there any kind person to answer? Thanks in advance.
I think I know why. maxm should be set to 35*(70/k+1), it can definitely be ac.
How to solve problem G?
First of all, lets just forget about setting the weight of an edge to zero for a second. So we want to find the shortest paths for all courier routes. Floyd Warshall might come to mind but $$$O(n ^ 3)$$$ is not likely to work here with $$$n \le 1000$$$. However we have an additional constraint on the number of edges, $$$m \le 1000$$$. So we can just Dijkstra from each node to get all distances in $$$O(n * m * log(n))$$$. Lets call these original distances $$$original(i, j)$$$.
So now that we have these original distances lets get back to the main problem, how do we find the answer for setting an edge weight to zero? Well suppose we set the weight of an edge {$$$u, v$$$} to 0. Then for each courier path one of the following must be true:
The courier path doesn't use this edge, i.e., $$$d(a_i, b_i)$$$ = $$$original(a_i, b_i)$$$.
The new courier path is of the form $$$a_i - \cdots - u - v - \cdots - b_i$$$ or $$$b_i - \cdots - u - v - \cdots - a_i$$$. Since $$$original(u, v) = 0$$$, we get $$$d(a_i,b_i)$$$ = $$$d(a_i, u)$$$ + $$$d(v, b_i)$$$ or $$$d(a_i,b_i)$$$ = $$$d(a_i, v)$$$ + $$$d(u, b_i)$$$ respectively.
We can just again use dijkstra from the vertices $$$u$$$ and $$$v$$$ (this time ensuring we don't pass through the edge {$$$u, v$$$}) to calculate the distances for the second case in $$$O(m * log(n))$$$ for each edge. After this we can just take the minimum of these three values to value of $$$d(a_i,b_i)$$$.
So we can just iterate on each of the $$$m$$$ edges, consider it to be the edge we make zero weight, and calculate the answer for all m edges using these distances in a total time of $$$O(m * m * log(n))$$$.
Submission — 96142460
Using Dijkstra only wouldn't this method also correct? (haven't implemented yet)
For every $$$(a_i,b_i)$$$ Let $$$e_1,e_2...e_k$$$ will be the edge in the shortest path. $$$C[i]$$$ contains the contribution of every possible edge i.e. $$$C[i]=w_i*f$$$ where $$$0<=f<=K$$$ is the frequency of the edge $$$e_i$$$ in all $$$K$$$ delivery. Now final answer will be $$$\sum C[i] -max(C[i])$$$.
I think it's right, right? However can you tell any easiest implementation idea of how I can get these edges in shortest path while using Dijkstra?
No, this is not correct. The given 2nd example in the problem statement is a counter example. It is possible that an edge is not picked with the initial edge weights, thus not even included in your shortest path.
Awesome Explanation. Thanks a lot.
can i get some help on finding the hack-testcase or why my code might fail on some cases ? it seems like a lot of people are getting hacked on F XD
my submission : my code
This solution looks copy pasted from somewhere here
Can anyone tell why my Submission for Problem D gave this weird Memory Exceeded Error.
My approach was to connect all possible edges(belonging to different gangs), then if it is possible selecting any connected graph print accordingly.
How to approach problem F ?
Today I gave my first contest but I did only A B C D in 2 hours. But I did not even get time to read F, G, H . How do I improve ? and what mistake is very common among ultra beginners ?
thats not a terrible first contest
E was such an easy ques that it can be solved in 5 min but due to bad statement it took me 1hr to solve...really disappointed
Awwwwww.......
I solved problem E afterwards with help of OEIS. During the contest, I was pretty messed up with that. Anyone would like to care what I am thinking wrong for Problem E. If I am not wrong there was two announcements. There was that thing, [1, 3, 4, 2] and [4, 2, 1, 3] are equal (in first announcement), [1, 2, 3] and [1, 3, 2] are distinguishable (in second announcement). My question is, I can make [1, 3, 2] from the [1, 2, 3] by choosing 1 (index 1) then going backwards index 3 with value 3 and index 2 with value 2, thus it makes [1, 3, 2]. So [1, 2, 3] and [1, 3, 2] circle should be equal like [1, 3, 4, 2] and [4, 2, 1, 3]. What is wrong with my thinking?
Weak pretests for F. Hacked a few solutions using this test case. 3 2 13 1 1 13 1 1 1
BTW F was a really nice DP problem.
You don't know what I did! I just took the max m/2 elements in every row summed them up and took the max number less than or equal to sum divisible by k and it passed pretests and later it got hacked. I already knew it would get hacked but this type of solutions passing makes me sad. The tests were quite weak. My solution would even fail for this-
E was 2*f(n-1)/n why did they ask for so small n? for f being factorial
also answer is f(n-1)/(n/2) !!
Both are one and the same thing !!
Is the contest very easy or all the participants were much more intelligent then me?
It was a easy contest .. But if anyone stuck in a problem thats effects so much.. May be u stuck on any problem..
yup
Problem F:
I think we need to rename
Div3 rounds
tovovuh rounds
. Sounds kinda cool :)As an extra, try to solve C for all fish, i.e. check for each fish if it can eat everyone else. It’s a surprisingly beautiful problem (probably div2E/div1C level).
Let's insert a sentinel fish with size $$$\infty$$$ both at the beginning and at the end of the array.
Consider a pair $$$(l, r)$$$ of fishes "blocking" for a fish $$$i$$$ if $$$l < i < r$$$ and $$$a_i + r - l - 2 < min(a_l, a_r)$$$ (basically, if fish $$$i$$$ were to eat all other fishes in the range $$$[l + 1, r - 1]$$$, it would be blocked by fishes $$$l$$$ and $$$r$$$). Obviously, if such pair exists, then fish $$$i$$$ can never outgrow range $$$[l + 1, r - 1]$$$. Conversely, if no such pair exists (except for $$$(0, n + 1)$$$, the "fake" pair), the fish can eat all other fishes.
Let's process the fishes decreasingly. For a fish $$$j$$$ (sorted decreasingly) consider all candidates $$$j'$$$ previously processed. These ranges would essentially exclude all fishes of size strictly less than $$$a_j - |j - j'| - 2$$$ (because $$$j'$$$ was already processed, it follows that $$$a_{j'} \geq a_j$$$, therefore $$$min(a_j, a_{j'}) = a_j$$$). However, the key observation is to notice that it is sufficient to consider only two pairs, more specifically $$$j$$$ with the biggest $$$j' < j$$$ already processed, and $$$j$$$ with the smallest $$$j^{\prime\prime} > j$$$ already processed. Other pairs would impose weaker restrictions on the fishes than we already have.
Therefore, we are left with $$$2n$$$ pairs of fishes $$$[l_i, r_i]$$$ that effectively say "mark with $$$0$$$ all values $$$i$$$ inside the range $$$[l_i + 1, r_i - 1]$$$ which are smaller than $$$min(a_l, a_r) - r - l - 2$$$. This can be solved with a variety of approaches, (segment tree, sweep line by position with max heap, sweep line by values with
std::set
or DSU, etc.) in $$$O(n logn)$$$ or $$$O(n \alpha(n))$$$.The first step (extracting the $$$2n$$$ relevant pairs) can be implemented with a
std::set
in $$$O(n logn)$$$ or a stack that keeps the "all nearest bigger values" in $$$O(n)$$$, therefore the total complexity is $$$O(n logn)$$$ or $$$O(n \alpha(n))$$$.Is $$$O(n)$$$ possible? (probably not)
We can use Segment tree. For every current fish $$$f_i$$$ we will do range update(left side and in right side). for $$$i<j<n$$$ we update as $$$a[j]=a[i]+j-i-1-a[j]$$$ in right side and $$$a[j]=a[i]+i-j-1-a[j]$$$ in left side. Now we will find min_range query in left side and right side If minimum value>=1 in both side then it's possible otherwise not. Overall complexity $$$O(NlogN)$$$
Please verify whether it's correct or not. I think it is.
What does your solution do in the case where $$$a = [4, 2, 1, 1, 1]$$$ at position $$$2$$$? Answer should be “YES”. More complicated cases exist, as well.
This is how I initially read the problem. Then I thought "this seems hard" and read it again. But now that I think about it again it is indeed a nice too-hard-for-Div3C problem.
Here's a quick outline of a solution idea:
The set of fish which can be eaten by the $$$i$$$th fish along with the $$$i$$$th fish itself, always form some interval $$$[L, R]$$$ such that $$$L \leq i \leq R$$$. This interval contains the $$$i$$$th fish itself along with $$$R - L$$$ others that can be eaten, allowing it to grow to a maximum size of $$$a_i + R - L$$$. Since it cannot eat further in either direction, it must be true that
Also, since the $$$i$$$-th fish is able to eat every fish in [L, R] except itself, it must be true that
Conversely, a fish is not dominant if and only if such an interval $$$[L, R]$$$ other than $$$[1, n]$$$ exists that contains $$$i$$$ and satisfies these three properties. Combining property (3) with properties (1) and (2) yields
But it easy to see that properties (4) and (5) do not depend on $$$i$$$. Moreover, because they can be generated easily enough by processing the fish in decreasing order of size, only $$$O(n)$$$ intervals can satisfy properties (4) and (5). We can then rearrange properties (1) and (2) to get that the $$$i$$$-th fish is dominant only if for every interval $$$[L, R]$$$ containing $$$i$$$ satisfying properties (4) and (5), at least one of the following is true:
For a single interval $$$[L, R]$$$ these can be combined into a single inequality,
$$$a_i \gt \min \{ \text{whichever of } a_{L-1}, a_{R+1} \text{ actually apply to this interval} \} - R + L$$$.
Finally, the largest (strictest) RHS in these combined comparisons for all values of $$$i$$$ and all intervals $$$[L, R]$$$ can easily be collected with a range-update max segment tree in $$$O(n \log n)$$$, after which the problem is effectively solved.
See also 96197931.
The solution looks good to me (at least the code seems OK)! I'm not exactly sure what you mean with properties (4) and (5) (for my example, $$$L = 2$$$ and $$$R = n$$$ satisfies your constraints, but does not block fish at position $$$2$$$).
I've posted my take on the solution to my original comment.
Constraints (4) and (5) do apply to the $$$L=2, R=n$$$ interval on $$$a = [4, 2, 1, 1, 1]$$$, but it does not block the fish at position 2 because $$$L \neq 1$$$ and $$$a_2 = 2 > a_{L-1} - R + L = 4 - 5 + 2 = 1$$$.
Regarding the question posed at the end of your solution: I expect $$$O(n)$$$ time is possible. My idea is to generate the constraining intervals in increasing order of $$$R$$$ with one pass, and to generate the constraining intervals in decreasing order of $$$L$$$ with another pass. Then, the constraints can be applied in $$$O(n)$$$ with one more pass using two pointers and a stack, since any two constraining intervals are either disjoint or nested. (EDIT: See 96263307.)
Incidentally, the hack test that I added to kill my incorrect version of that submission with slow asserts left on caused around 150 people with naïve $$$O(n^2)$$$ submissions to the original problem C to fail system tests.
‘Any two constraining intervals are either disjoint or nested’ -> nice one.
Also, it’s pretty funny that you managed to hack 150 people by hacking your bad solution.
Some progress.
1. The set of fish $$$i$$$ can eat forms an interval $$$[L, R]$$$ where $$$L <= i <= R$$$. If we can't extend it any further, than
2. $$$a_{L - 1} >= a_i + R - L$$$ and $$$a_{R + 1} >= a_i + R - L$$$
3. $$$mx(L, R) < a_i + R - L$$$
if we combine, we have
4. $$$a_{L - 1} > mx(L, R)$$$ and $$$a_{R + 1} > mx(L, R)$$$
Now, how to check that thing? I am struck here.
For problem D, why does 96184774 AC and 96185095 doesn't? All I did was change arrays to ArrayLists. I am unable to see the testcase which it fails on.
Integers are object so you can't compare them with == because most of the time the references won't be the same.
Anyone, please help me here! I coded F and got a TLE on case 144. I was practicing out of the contest, so I hardcoded that case to see if there are more cases like it. But after hardcoding, my solution passed. On scrolling through cases, Case 144 and Case 227 are similar while 227 being more in size constraints. But my solution passes 227 while fails on 144 if not hard coded. I used DP. Can anyone please help why is this happening and how do I optimize to pass case 144?
Submission: 96189336
Update: Hacked my own solution so as to someone don't see it as an AC solution. But someone help me out here so as to why is this happening on case 144 and not on 227. And how to optimize?
Update 2: Figured it out! Thanks
deleted
The comment is hidden because of too negative feedback, click here to view it
Its wish comes true day
It is so annoying to see that someone needs only 2 minutes to solve the problem G while I have to spend 2 hours :/
When will the ratings come?
For the ratings, We need to wait at most 12 hours after the open hacking phase is finished.
P.S. From my experience from previous Div3 contest participation :)
There is no hacking phase in this round right?
There was . 12 hours open hacking phase. Finished 3 hours ago . I have seen
its been way more than 12hours.
12 hours after open hacking gets finished. Not after 12 hours from contest. Open hacking finished 5 hours ago .
P. S. from my experience from previous contest participation :)
This was my first contest. I submitted a couple of questions which got accepted. why am I still unrated?
any help regarding this ? X(
The ratings have not been updated yet. There was a 12 hour hacking phase after which system testing begins and after that ratings are updated.
@vovuh my rank on common standing list and friend standing list are showing different please tell me which one would be considered, it is a difference of 300 rank which would be quiet high for Div3 for me , please reply
Yes. I have also observed the same.
In common rankings, only trusted participants are considered for the ranking. Just below the title "Common Standings". It is mentioned "[Trusted participants only]". So, I guess the rank shown in your friend's standing list will be considered for the rating.
//it's of piranha question.. I did the same as editorial now...will u please help where is my logic wrong???
Your are accessing a[i+1] without even assign any value to it. I guess that is the reason behind it.
Can someone tell me whether Hacking changes your ranking in this contest, because I hacked 3 solution but my rankings didn't got changed
Don't dzgod1905's submission times look suspicious?
ummmmm well nahhh
lol
well i begin to do reverse and i code after i have done reading all the problem
Can anyone help me figuring out the solution for the 3rd Question ( Dominant Piranha ) if the question asked how many piranha's instead of any one dominant piranha.
The first comes to my mind is very naive, piranha is dominant if it can eat all piranhas around. So you can store piranhas in linkedlist. For example you are checking i-th piranha, on each step you remove either right or left node and increase value in current until there are no steps or neighbors. Repeat this for each piranha. O(n^2). Key is to store piranhas in linkedlist.
You will have to find the maximum element in the array , if the no. on its left or right is less than that no. , the index of this value is your answer, whereas if both of its right and left are equal to it make I+=1; and check again . The answer would be No only if all the elements are equal
When will the ratings are going to update of this contest?
Is this rated?
Why hasnt the rating been updated yet? Its almost 20 hours.
When will ratings update?
Is this round rated?
Your ratings have been updated already, at least bother to check your profile before posting crap here
Is this round rated?
vovuh Why do you never announce round winners?
I did it some time ago, but the script awoo wrote for winners table worked incorrectly for Div3 iirc (there was a problem with trusted participants) and I stopped posting them. I wanted to fix the script for Div3 but
I'm too lazydidn't have time to do that. Maybe I will do that in a few weeks or ask awoo for the help.Hi vovuh,
Is the way ratings for problems are calculated standard across all different types of contests? Looking at the ratings now, they seem incredibly mismatched, seeing as both F and G are rated 2100. G is somewhat understandable, but how in the world did F become the same? Although fitting for a Div. 3, you probably cannot ask for a much more straightforward DP problem! Perhaps it is because of the fact that Div. 3s are regarded as 'easy' contests, so CMs and above don't take the contest seriously and go straight for the final problem, and upon solving it, leave? In any case, maybe problem ratings for Div. 3 rounds should be calculated manually instead?
Hey. I'm sorry, but I would say the thing I said so many times already: I'm not tied with the technical side of Codeforces (and calculating problems rating is exactly its technical side). I'm just an author and a coordinator (in some way), so you could ask Mike about that feature and its correctness.
Regarding F. Zero Remainder Sum: Can someone PLEASE tell me how can I make this code faster 96316767. I've been trying to figure it out all day. It is exceeding the Time limit test 6.
Use a 4D array instead of a dictionary.
Thank you for your suggestion. Unfortunately, I did try this alternative already 96316025 and it failed on the same test
Do you think it’s imposible to solve it using recursion in python ?
There are 0 accepted solutions in Python xD. There are a few using PyPy3. But ig all of them are iterative.
In C++ even my N^5 solution passed xD.
What's up with the rating of the problems ?
A-E are under 1300, F is 2100 which is a pretty standard dp.
F is standard, but it's way more difficult than E.