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

The round will be hosted by rules of educational rounds (extended ACM-ICPC).Does this mean working in teams is allowed since ACM-ICPC is a team contest.NO!! That's just for rating system.

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.

This is a vintage question bro

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 ?

Well i did'nt say that..obviously it might be any of 6 ,7 or 8

Our beloved Vovuh is back to us.

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.. :(

Why this comment is getting so many downvotes?

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.

Exactly!

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 ...

8 problems. GG

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

i am a new guy to this platform

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.

@waltz47 Oh thanks , by contest you mean div.3 or anyone thanks again!

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.

Yes. Same with me. Solved A and B in 10 min and got stuck on C because of run-time error. This makes me sad now.

.

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?

I'm not sure about a formal proof.

However, if you imagine an actual horizontal grid with books as in the question and exclude the outer zeros, the number of moves required boils down to how much you can compress the span of books. Also, its always optimal to move a block of ones together instead of one at a time.

I am little new to CP, but what I have learnt is not to give up. If you don't get it now, try hard later, repeat, still didn't get it, see the editorial's first line, then try to code, still stuck, see some more editorial, still stuck then see full editorial, still stuck, just try to understand the solution code and after 2-3 days try to code it on your own.

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.

thank you

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.

Tbh, I kept trying different formulas and got $$$\frac{2^n}{\frac{n}{2}}$$$

Edited: See comment below.

What is that? Its not even true for n=2

Oh sorry, I probably need to sleep now. My correct formula was $$$\frac{(n-1)!}{\frac{n}{2}}$$$

hahaah ok...yeah it is a direct simplification of what I wrote above..nice.

I was thinking of a birpartite graph with coloring, but it wasnt, just search for a pattern.

For D you realize that you can group graph vertices into components based on their entity/number assigned to them. You can then number each group and join only one element of each group with each element of the group that comes after. This way all the elements of next group are reachable one from another.

Say you have groups 1, 2 and 3. You join first element of 1 with all elements of 2 and join first element of 2 with all elements of 3. Finally join all the elements besides the first one in the first group with first one of the second group. Why? So that each vertix of first group is reachable from any other.

The only base case is when there is one color, then there exists no answer.

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. ;_;

For D if all of the districts belong to the same gang it can't be done, otherwise pick two districts with different gangs then iterate over all districs and connect them district to the picked district that has a different gang of the two you picked earlier

Omg I was going to adjust prims algorithm

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`

and`12164510040883200`

) or this (searches using wild cards).I did the same :D O(OEIS) https://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 ??

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.

Sadly I got this right 3 sec after contest ended...I hate OEIS.

(N!)/(N*(N/2)).

where it has come from?

`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`

= 70ANDways to arrange people in one group =`(4-1)!`

= 6ANDways 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

LOL used the exact same thing and happened the same exact way...3 sec after contest ends...AC xD.

and I got this idea 3 minutes before end of the contest ;)

What were the solutions to F and G?

Accepted Accepted Accepted Accepted

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 by`K`

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.

I have written "simplifying to" and not "simplifying from".

I thought D is like, I have to arrange elements of an array such that no two adjacent elements are of same type using max heap. But don't know why that failed :(.

Solved 3 problems for the first time, Is this round easier than usual or have I improved?

Both are possible, it was slightly easier this time, but it seems like it's been like that for the last 10 rounds or so, so it could be a bit of both.

important thing is your rank.

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 :(

I read the announcements only 15 minutes before the contest ended :'(

Great Contest Feeling sad for not solving E coudnt figure out the formula

Anyone solved the problem D using maximum spanning tree where

`weight = abs(a[i], a[j])`

?You don't need MST @rds_98. Just see if there are atleast 2 distinct gangs. If yes, select the first index, and build a road with any district which has a different gang. Now select an index which is not equal to the first index and build a road for all the first gang districts with this road.

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://codeforces.com/contest/1433/submission/96110388

Thanks a lot guys.

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.

One Correction

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/2times. for example, [123], [312] and [231] are the same. so, it's (n/2)!/(n/2). So, (n/2)!/(n/2) = (n/2 -1)!Correct me, If I wrong!

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 !

But "Time is a Flat Circle"

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.

thank u

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 ?

You do all the problems and then submit all in 1 go. maybe a script can help you as well.

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

OEISafter 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 :(

Can I see solutions somewhere?

Official editorials will be posted after the hacking round gets over.

please tell what is wrong with my solution it is showing run time error with exit cod=2147483647 https://codeforces.com/contest/1433/submission/96165473

You rec function is not returning anything

But when i had tested it on my system it was working fine.

Ok I forgot to write return ans;

thanks.

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 ;)

E's problem statement was so confusing. Wasted 30 mins for me. They didn't make it clear if rearrangements in circle would be considered a different pair

That's why it was "E". (Although today's E was easier than previous)

In my opinion they made it perfectly clear in this statement.

Two round dances are indistinguishable (equal) if one can be transformed to another by choosing the first participant. For example, round dances [1,3,4,2], [4,2,1,3] and [2,1,3,4] are indistinguishable.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 !

Likes AtCoder ABC(cf version) xD

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

Can anyone tell why problem C is getting Hacked!? Where it is getting TLE?

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.

(2*n!)/n^2

Or, (n-1)!/(n/2)

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.

thnx for u all

my mistake was that i increased the piranha by array[index] not by 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 :pWhy 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.

Can someone explain why this solution for D gives wrong answer, I tried it on local, it gave the correct answer for test case 1, but on OJ, it's giving WA.

can you explain your approach ? I am looking for other approaches to solve this one.

My O(n^2) solution with DSU got accepted. here is is: accepted code

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://codeforces.com/contest/1433/submission/96164623 This is my AC code after the game https://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?

Use floyd Warshall algorithm to find the shortest paths and then find min distance by removing a edge.

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

Was expecting someone would do this and here it is.

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

I get 449 rating (total) and I am in the bottom of the newbies. How is not terrible ?

Your rating will build everytime you can answer 4 questions. It also measures consistency. Look at my rating, I answered 3 of those questions and dropped to 978

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-

testAny hack test-case for A-E?

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`

to`vovuh 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).

SolutionLet'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.

Ohh yes. I didn't consider the case $$$:-$$$ if I am going towards say left at any point of time(in the middle) I can turn right and then left,right,left... Hmm Now I don't know how to do this. Thanks for pointing it out.

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:

SpoilerThe 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.

Can you please also tell a way to solve that one?

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 :/

Will this round will be rated for user having rating less than 1000 if then why rating has not been updated yet?

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?