Hi, Codeforces!

We are glad to invite you to take part in Codeforces Round #569 (Div. 1) and Codeforces Round #569 (Div. 2), which will be held on Friday, June 21, 2019, at 19:35. The round will be rated for all participants from both divisions.

Problems for the round have been proposed by Ivan ScreaMood Fedorov, Kyrill MAMSURENOK Bessonov, Mukhammadjon Mr.Hakimov Hakimov, Fedor ---------- Ushakov, Fedor Kuyan Kuyanov, and me, Dmitry DmitryGrigorev Grigoryev.

The round have been prepared by us, Dmitry DmitryGrigorev Grigoryev, Fedor ---------- Ushakov, Dmitry TheWayISteppedOutTheCar Piskalov and Mukhammadjon Mr.Hakimov Hakimov.

We'd like to give thanks to Ildar 300iq Gainullin for excellent coordination of the round, to Sooke Sooke Gnar, Xiuhan sunset Wang, Ziqian TLE Zhong, Junzhao FizzyDavid Yang, Jiaxuan samjia2000 Gao for testing and to Mike MikeMirzayanov Mirzayanov as well for his unbelievable Codeforces and Polygon platforms!

Participants in each division will be offered 5 problems and 2 hours to solve them. During the round, you will be helping pupils of one usual Moscow school. Score distribution will be announced, traditionally, closer to the start of the contest

Good luck!

**UPD** Score distribution for Div.2 is standart — **500-1000-1500-2000-2500**

Score distribution for Div.1 — **500-1000-1500-1750-2250**

**UPD2**

Thank you for your participation in the contest!

List of the winners of the contest:

**Div.2**

**Div.1**

My frank congratulations to all the winners!

We hope for a good contest.

when the contest delay for 30 minutes)

We hope for a contest*

Yes.

The whole IOI Chinese team tested the round + 300iq coordinated it.

So we should expect for a very interesting and tricky contest. :D

We should expect strong pretests and no errors in the contest.

This comment didn't age well ;p

I loved Div.2 B's pretests. This was my first time hacking and I could hack 6!

You forgot Sooke.

The whole IOI Chinese team tested the round!!!**- **

I think you should write your own comments

Round tested by Chinese.. Hope it will give me an unforgettable experience :)

It's actually a Russian round, it was tested by the Chinese.

What exactly do you mean by unforgettable? Don't scare me :P

It's 0:22 in the morning in China, and the contest will be start in 40+mins. It's very unforgettable, isn't it? (though in another way)

have a nap in case of brain power outage

I had just slept to 00:30,and when I woke up and saw the rest time to wait...It should be unfogettable.

Well, it indeed was unforgettable. B got hacked :/

" During the round you will be helping for pupils of one usual Moscow school." What does this mean?

i too want to know....

pupils -> schoolkid / students.

pupils -> between 1200 and 1400 rating

i don't think i can help them in any way , i started coding almost 3 months ago and my rating is falling continuously.... i think i need help ....

It will increase once you forget thinking about it! (except just after the contest :P)

This is the theme of the contest, the questions will be like "Pupils of a school in Moscow want to perform a certain task, but its too difficult for them, so they are asking for your help..."

Nice. I am too tired of helping vasya and petya

Nastya, Tanya

Should I mention Alice and Bob? I still don't if Alice is a female or male XD

The characters in these problem statements are more unrealistic than characters in porn movies.

Main characters of problems will be school pupils/students.

I think

`Xuihan`

is a typo. You may mean`Xiuhan`

.(Sorry for my poor English)

wxhtxdy!

IOI Chinese testers teamlolA 5 problem contest after long days

Nearly 12 p.m at my place. But all love for programming, I will try my best.

for me it is nearly 12 am, but Im getting into skipping lunch, so not that bad as it is for you

VietNam and Brazil: 12 hours away ^^

Now it is almost 2 a.m. for you '-' Are you going to participate?

At my place, the contest starts at 11.35 p.m and ends at 1.35 a.m. I think it'll be fine for me to participate

I think you meant 12 a.m. because by convention, 12 p.m. is noon, not midnight.

Oh yes ^^. Then 11.59 p.m would by fine

Nerd

helping kids, noble task.....who's gonna help me help them......lol

time to think

Best of Luck for your first contest as a problemsetter.Whole people wrote the same comment "ioi Chinese testers team" What is happening!

social_credit++

I wish positive rating for every participant :)

This is not possible :)

if you consider 0 as a positive number it is possible, LOL, just kidding.

The total rating decreases after every contest, otherwise, ratings will become higher and higher because new users will join Codeforces with the initial 1500 rating points.

if no new users participate, then the total rating won't decrease

Also if no users participate, then the total rating won't decrease

Also if one user participates, then there won't be any change

i hope no new user to join, else i am already doomed..

you cleverly wished for yourself. Nice

definitely brother :-) .....

In fact, Sooke's name is not Sooke Gnar. However, he loves Gnar —— The Missing Link very much.

Chinese people have interesting names

Ｔhis time is not friendly to Chinese players

Time changed from 19:35 UTC to 22:05 UTC.

Time increased = 150 minutes.

May we also get +150 rating today.

Lol, sounds great! Good luck anyways!

good luck

New Codeforces round, new chance to fall!

Div2 contests:How many times do we have to teach you this lesson old man.You're so cool :0

You're cool! You're all cool!

Not me :(

Keanu in the house!

This meme never gets old :D

So lucky that the contest starts right before I get home

A delayed contest has never been good for my rating.

UPS is needed.

What is the score distribution?

。

Don't remember asking you.

Dont't remember saying to you.

did you take your memory pill??

you are not friendly, goog bay!

Sorry :-/

When reading the comment section ends!!!

System Test:(->How 30 minutes before contest felt!!

Now we have Caseforces!

The pretest of problem B is BRILLIANT, because I have just made the first TWO Successful Hacking Attempt in my life !

What was the Hack?

The first one is 2\n 0 -1 (which get the wrong answer —— 0 -1), and the second one is 3\n -1 -1 -1 (which get the wrong answer —— -1 -1 -1). Hence , I guess the pretest of it is too big for some wrong program (?)

my program failed at 9th pretest ,can you help me....

What was ur logic?

The logic is simple make all non negative numbers negative by operating on them. If n is odd pick the number with highest magnitude and make it posetive.

Print all the numbers.

Logic- firstly i converted the array to another array in which the magnitude of each element is maximum (comparing after operation to it's initial valu) .and then found product of all the numbers in the new array. In second step i checked if product is negative then i found the element in the new array which satisfy: 1. It is negative. 2. It's correspondence to given array is positive and not equal to zero. 3. It has least magnitude satisfying above condition. Then i changed that element back to its initial form in the new array. Now product become positive and maximum.

After that i printed the new array but it failed at 9th pretest ....

I solved using C Language ,and used long long int for input but it's it shows large product not possible at test case #9 hence failed What to do?

In this task max product can be

`(10^6)^(10^5)`

, but max product that u can use in long long int is`10^18`

. Obviously, it shouldn't work because overflow.bro , i used long long int. i dont know there exists any data type greater than 'long long int' in c language.

https://codeforces.com/contest/1180/submission/55892852 here is my solution ,see it failed at 9th pretest, i am not able to understand error;

That's part of the problem u have to do it without calculating the product of all the numbers...although there are techniques to manipulate big numbers but it isnt needed for this task... go through the editorial

and here is my soln as well

https://codeforces.com/contest/1180/submission/55915141

I got one on 3/n 1 1 -1

pretests were too dumb, there is no pretest with a[i]=0

no luck with getting a candidate

~~fuck this CM, I'm gonna be master~~How to solve D?

A 6x6 can be traversed like this, other cases are also analogous. You can easily show that this method does not use the same vector twice.

But most probably this is not the only solution. There can be other ways as well.

Is it the only simulation or any proper mathematics.

You could call it intuition.

First check whether you can always do it for some $$$1$$$x$$$N$$$ grid.

HintYes you can. Start at $$$(1,1)$$$ => $$$(1,n)$$$ => $$$(1,2)$$$ => $$$(1,n-1)$$$ => $$$(1,3)$$$ ... This way, you are going right by (n-1) moves at first, then left by (n-2) and so on, and the magnitude keeps decreasing, so you never use the same vector.

Complete SolutionUsing above hint, you just have to do it in $$$2$$$ dimensions instead of $$$1$$$. So, pick two rows at a time ( or two columns as shown by RubenAshughyan above ). Keep jumping between rows and doing the $$$1$$$-row case. Also, you note, taking two farthest rows, again prevents any vector being used twice.

Finally, if there are odd number of rows, then do $$$1$$$-row case for last remaining row. That's all.

Using that method, it's easy to show that once you take a certain vector, you never use it again. That's because the squares on which you could use that vector have already been visited before.

what if columns are odd sized?

It does not differ much

excellent pattern! How did you come up with it though?

https://codeforces.com/blog/entry/67813?#comment-520779

Fun Fact: infinite recursion if you keep reading downwards, starting from above post.

I had to draw many grids for quite a few no. of pages to figure out this pattern.

I did too! but unfortunately stopped at the idea of visiting the same line (going onwards and backward), the diagonal kind of moves is so brilliant! Kudos to you guys!

nice!

Starting from (1, 1), move to (n, m), then (1, 2), then (n, m-1), and so on till (n, 1). Then go to (2, 1), then (n-1, m), then (2, 2), then (n-1, m-1), and so on till (n-1, 1). Keep repeating this process. If you reached a row i where row i == n-i+1. Then just from (i, 1) move to (i, m), then (i, 2), and so on till you visit the whole row.

Hey using the same logic I had a TLE, I’ve no idea why

https://codeforces.com/contest/1180/submission/55902704

Replace cout with printf.

Thanks, mate. The constraints seem to be too tight,

Well, jfyi std::endl is not the same as “\n” because of stream flush.

For solving D, i converted it into 1-D array and then using two pointer i solved it . For eg . 2 3 ==> 2*3 = 6 we are firstly in 1,then i will visit 6 then 2, then 5, then 3 and so on .

Is div1E an exercise on the proportional cake-cutting + optimizations to pass $$$O(n^2\cdot\log{n})$$$ queries?

The 3 accepted submissions seems like $$$O(n\cdot log n\cdot log 10^{18})$$$

Our solution seems to work in $$$O(n \cdot log(10^{18}))$$$ queries

What is in pretest 9 of problem B Nick and Array?

I got stuck on the same pretest :(

Try 2 3 4. Answer should be -3 -4 4

how did you solve B?

The only way to increase product is by increasing |a| for each a in array. Only positive numbers can be increased in magnitude by the given method i.e. 4 becomes -5 so |-5| > |4|.

So first change all positive numbers like this including 0 to -1. Now all are negative. If even sized array, we cant do better. If odd sized change the largest negative number like -100 to 99. This makes product positive

what is the logic behind taking the largest negative number in magnitude instead of smallest negative number in magnitude

When you change an element with value -x from negative to positive it becomes x-1. This multiplies the magnitude of the product by (x-1)/x. You want this to be as large as possible, and it gets larger as x gets larger.

No I don't think so . My answer is -3 -4 4 according to 2 3 4. I think it is 9 -4 -5. the answer should be 9 -4 -5 .

Oh got it, I keep the least one as it is.

Hey, how to arrive at such test cases during contests ? Your test case is brilliant.

take the biggest negative number instead of least.

I was making this mistake, can you prove your greedy approach ?

if you are multiplying 2 numbers x and y, such that |x| > |y| then you can visualize it in 2 ways, first adding y x times and second adding x y times. Now if you decrease x then you are just removing 1 y and if you decrease y then you are just removing 1 x. Now you can see which one is optimal.

Thanks, a. (x-1)*y = x*y — y and b. x*(y-1) = x*y — x And, yes equation a has higher value.

try this

3

-2 1 0

please help me to identify my mistake in problem B https://codeforces.com/contest/1180/submission/55894819

6 -1 -2 -3 0 0 0 try getting this case correct, almost all hacks are the similar to this (afaik).

Thanks

The order of array is destroyed after sort. Also, the logic is very convoluted. Observe that -a -1 only increases |a| for positive numbers. Try using this fact

Thanks

try this test case 3 -4 -9 -8 Your output is -4 7 8

Thanks

have you change the element which is equal to zero 4 0 0 0 0 ans should be -1 -1 -1 -1 but your code print 0 0 0 0

Thanks

shit that m1 range i took it int got wrong

I hope to finally become a candidate master :).

I'm just gonna skip B in future rounds, C is almost always easier for some reason.

The logic I used for b was much simpler than c imo, (convert all to negative and then convert the least to positive if n%2==1).

can u explain your logic with this test case ? 5 1 2 3 4 -1

it has not to be the least negative, it has to be the least negative different to -1

first you convert all to negative, ie -6 -2 -3 -4 -5 -1. now because n%2 is even, this is the answer. if it was odd, (if converted array is -6 -2 -3 -4 -5), then pick the smallest value and make it positive (5,-2,-3,-4,-5)

I mean this. 5 is the number of the element. 5

1 2 3 4 -1

-2 -3 -4 4 -1. you can look at my code in standings, its the same logic.

well after making all the integers negative I brute forced but even then I am getting the wrong answer for test case 9!!

but if u r done brute force then surely u r multiplying all the numbers initially but from that overflow occurs, due to than u cannot get yur answer correct in large value,

Oh yes,I realized that later.By the way thank you for reply.

me too

even that, C you did not have to think anything, just implement it

Take this case of length 3

-2 -3 -4

I think your logic will not work for this case

you can check my code directly, I used this logic. In this case the output is -2 -3 3.

ok

its a very nice solution, a solution I never thought of, not even a slightest bit.

Edit:nvm i got it

Hey, you can either look it through an example: (-2,-3,-5) changed to (1,-3,-5) or (-2,-3,4). clearly, the 2nd product is greater.

Proof:

Let a1,a2,..., an be +ve numbers in sorted order.

It would be obvious that:

(a1-1)*(a2*a3*a4*...*an) < (an-1)*(a1*a2*...*a(n-1))

thanks

Very nice and enjoyable problems!

What concept was involved in Div1C ?

Hint: imagine it as brackets

Consider suffixes of cummulative frequency of both dishes and people.

Can you please expand a bit on your solution, because I couldn't think of something with these hints. Thanks!

Let $$$fstudents(i)$$$ be the frequency of students with money equal to $$$i$$$.

Let $$$fdishes(i)$$$ be the frequency of dishes that cost $$$i$$$ money.

We are looking for the greatest j such that $$$\sum_{k = j}^{1000000} fdishes(k) > \sum_{k = j}^{1000000} fstudents(k)$$$.

We can consider $$$dif(i) = fdishes(i)-fstudents(i)$$$. We want to find the rightmost index $$$i$$$ such $$$\sum_{k=i}^{1000000}dif(k) > 0$$$.

We can have a segment tree that stores the value of maximum suffix sum of $$$dif$$$ in range. The updates are just adding and substracting 1 from leaves of the tree. We can answer queries in $$$ O(Qlog^210^6) $$$ by binary searching to find the first $$$i$$$ such that the maximum suffix sum is greater than 0. We can do this faster, in $$$O(Qlog10^6)$$$ by the method of descending the tree. I hope i explained it clearly.

Thanks Charis02

Why to bother trees ,if we can solve it using brute force. Can't we make it simple? Edit — I tried but got time limit exceeded message .

What is method of descending of tree.

Hey, I think I’m missing something simple. Why is it sum(dif(k)) > 0 instead of sum(dif(k)) < 0? If the sum is positive for some i, doesn’t that mean that we have more students than dishes for that i, not that there’s a dish we can take.

Yes you are right, sorry. I meant to write $$$dif(i)=fdishes(i)-fstudents(i)$$$ . Thanks,I'll correct it.

Hey, one doubt. If you just update the leaves in the seg tree will it be suffice ? Dont we need to update all suffixes of greater length than this ? I.e lazy prop. Bcoz if you just update one suffix then the suffix greater than this length won't have updated value and will have one student or dish less ?

No, because by updating the leave you update all ranges containing it (standard segment tree update). You don't need lazy prop because you update only one leaf not a range of them.

code_kit

By every node $$$nd$$$ storing the maximum suffix sum of $$$dif$$$ in range, Charis02 means suffix with respect to $$$nd$$$, not the whole array.

Can we actually solve D like this or is it just luck?

55894627

It is almost the same solution everyone wrote.

It's correct

Can you please explain its correctness ?

Look at n=2

A clever implementation. I did the same but far more cumbersome.

Same here. Now it looks like I wasted a lot of time, after seeing this short submission.

Delay in System tests?

Can Someone explain why their code give TLE -

https://codeforces.com/contest/1180/submission/55899448

https://codeforces.com/contest/1180/submission/55903257

use '\n' instead of endl

Is there again power outage??(Delay in systest)

eagerly waiting for system testing.

Looks like Systest won.

memewoosh

Is there a hacking phase? I suppose only Educational rounds have hacking phase.

Yes, only Educational rounds and div 3 rounds

It is really a good contest.

It happened to me for the first time. My solution was hacked midway between the contest but after a while I got a notification that my solution was correct.

Link : https://codeforces.com/contest/1180/submission/55886651

I hacked you during the contest with the test case:

After pressing the hack button, I found that it should be an unsuccessful hacking attempt but it turned out to be a successful one

I thought it's quite strange and I've reported this to problem setters during the contest Few minutes later they replied "under investigation", and your code is Accepted, my hack became an "ignored"

Actually I'm not sure what's going on lol

Thanks a lot buddy, You sacrificed 50(150) points just for honesty. Cheers.

But the setters might be having similar system tests as well, so setters please be careful of your system tests for Div2 B

We had a little bug in our checker and it didn`t work correctly when the answer is $$$0$$$ and the jury answer is different from the participant answer as a multiset. We are sorry for the mistake.

Hello there.

Sorry, that was definitely my fault, because as a coordinator I missed this case with $$$0$$$ in the checker. There were no similar tests in other hacks or in systests, so everything should be fine.

My apologies to shpvb, who suffered from my mistake.

I will be more attentive to these kind of things next time, sorry again.

No problem buddy, that is totally cool with me.

Hey 300iq, My submission has not been evaluated yet. Is there any problem?

Sorry, It got evaluated in the end.

Also, thank you for your honesty! Without you, we wouldn't notice this bug.

Thanks for nice contest and interesting problems, too!

I think this works for E, but I wrote too many bugs so couldn't get it to work in time :(

Edit: 55909022. Turns out some constant optimization was required too, so I wasn't that close

solution to EIf $$$v = ask(i, x)$$$, let $$$x = rev(i, v)$$$. Set $$$t = \frac{L}{n}$$$.

We will first sort the functions into order $$$p_{1}, \dots, p_{n}$$$, then return the interval $$$[rev(p_{i-1}, ti), rev(p_{i}, t(i+1))]$$$ for $$$1 \leq i \leq n-1$$$, and $$$[0, rev(p_{0}, t)]$$$ for $$$i = 0$$$. This ordering will work, since due to the sorting we will do, the condition $$$rev(p_{i}, t(i+1)) \leq rev(p_{i+1}, t(i+1))$$$ will hold, and therefore $$$[rev(p_{i}, ti), rev(p_{i}, t(i+1))] \subset [rev(p_{i-1}, ti), rev(p_{i}, t(i+1))]$$$, and the function clearly increases at least $$$t$$$ in the subinterval, so it increases at least $$$t$$$ in the interval, so the solution works.

To find this ordering, we do divide and conquer. First, sort all points into the group of size $$$\left\lceil\frac{n}{2}\right\rceil$$$ with smaller $$$rev(i, t \left\lceil\frac{n}{2}\right\rceil)$$$, and the group of size $$$\left\lfloor\frac{n}{2}\right\rfloor$$$ with at least as large. Then recursively sort the smaller and larger subsets, but instead of using $$$rev(i, t \left\lceil\frac{n}{2}\right\rceil)$$$, we use $$$rev(i, t (k + \left\lceil\frac{n}{2}\right\rceil))$$$ where $$$k$$$ is the total size of the subsets we have sent to the left side of the recursion so far.

Doing this naively would require $$$O(n \log(n) \log(10^{18}))$$$ operations, which is too many, but we can do it smarter by applying randomized quickselect to split the groups. Randomly pick a pivot $$$i$$$, find $$$x = rev(i, t (k + \left\lceil\frac{n}{2}\right\rceil))$$$, and see if the value $$$ask(j, x)$$$ is at least $$$t (k + \left\lceil\frac{n}{2}\right\rceil)$$$ for the other $$$j$$$ in the current subproblem. By doing this we can split the functions into the functions less than the pivot, and functions more than the pivot.

This requires an expected $$$O(m + log(m) log(10^{18}))$$$ operations when splitting $$$m$$$ functions, so we need in total only $$$O(n \log(n) + n \log(10^{18})) = O(n \log(10^{18}))$$$ operations, which should fit into the bound.

I think can't pass D because of lines:

I did not find the anti test. Please count my solution as correct if this is the case :(

DmitryGrigorev please look this. I know it looks stupid but I don't want to lose points because of this.

Give me more minuses. My logic was correct. If it was n <= m code will passed. You are ratists even did'nt read what I wrote. I wish your solutions failed due to checker get Compilation Error on test 99 and etc.

Lol. If you swap lines, you swap coordinates. So you should also swap coordinates in your algorithm

Why the system test still pending?

started !!

It has started.

everyone should be given positive bonus rating because of unexpected power cut occurred before start of exam ..... it mentally affected many people ,hence not giving their best output in exam.....

note: if some one don't like it ,kindly don't down vote it as i already have negative contribution, just ignore this comment and move on.

Actually it made me feel lucky, due to wrong timing I thought contest will start 1 hour later than actual time

how do i delete my comment????

It is impossible, I think

The power companies should give everyone free money because of unexpected power outage... it mentally affected many people.

Any hints for Div1 D?

How to solve DIV2 E ?

I wrote a brief explanation here: https://codeforces.com/blog/entry/67813?#comment-520927

When your rate reach the buttom look at the bright side there's one way to go (me trying to motivate myself after my stupidity streak this month)

Div2B have bad pretests.

And a lot of people had wrong solutions, FeelsBadMan

Strangely enough, almost always in Div. 2 problem B has the worst [pretests passed / accepted] ratio. Not sure about the reason for this phenomenon.

div2B is pain in my ar**hole

That's what she said, not sure if it was about div2B :-/

It's a comparative thing. Before system test, my standing was 618, after system test, it's 557. So if you avoid all pitfall but others not, you can have a better standing. The contestants who found the pitfall and avoided it should have an advantage over those don't.

Good old five-problem contest. Skill over speed. Thank you.

I like this grand old way of 5 problems. I personally don't enjoy subtasks and contests which has very large problems like 7 — 8+. less and good questions are good to stay you focus during the contest, rather than moving here and there to solve subtasks.

I doubt it's possible to make skill over speed contest if it lasts less than, at least, 2h30m. When contest lasts a bit longer even if it has more problems in it, there's much more bigger probability that you will reach problems you can't solve because of your skill and not speed before the contest time ends.

By the end of the 2 hour contest, I often don't reach the task that I'm not able to do, because it takes me a lot of time to solve the tasks before that one, but I really don't think my slow performance should be rewarded with longer contests.

Hackforces

lol.

Please make pretests not so strong next time :)

It seems like there are no fails on systests at all

Are you really suggesting they should intentionally make pretests weaker?

Imagine failing to system tests because the specific corner case your code didn't handle was removed from the pretests, while others fail pretests and can fix their code. Yeah, no thanks, more rounds like this please.

I suggest that pretests shouldn't cover, like, everything.

So it's more about they shouldn't make them intentionally strong.

If you are bored with nothing to do, I wouldn't mind knowing what's wrong with my D. :)

EDIT: I just mean I want someone to debug my code :)

Well, it clearly says that.

wrong answer 1st numbers differ — expected: '204997350968', found: '204998250971'

You output incorrect number.

Brilliant explanation on how the WA verdict works! You should totally write a blog on that.

Your code only computes the correct answer for paths through the first centroid found. This seems to suffice for almost all cases (as Radewoosh mentioned), but not always when the tree has two centroids (which test case 103 satisfies). Try comparing my getAns function with your get_subtree function.

EDIT: As saketh mentioned, there are also counterexamples where the tree has only one centroid.

(mine) 55894131

(yours) 55893926

Can you please tell if my solution for D is correct?

The final structure will look like a cycle with branches coming out of the nodes which are a part of the cycle. Let there be 'x' nodes in the cycle and size of the subtree going out of these x nodes be a_1,a_2,...,a_x. So now there will be an extra path from any node in one subtree to other subtree. Thus there will be a_1*(a_2+a_3+...+a_x) + a_2*(a_3+a_4+...a_x) +...+ a_x-1*(a_x) extra paths. This can be written as: ((a_1+a_2+...+a_x)^2 — (a_1^2+a_2^2+...+a_x^2))/2 . First term is equal to n^2. So we need to minimize 2nd term.

So now choose arbitrary root. Let there be a node 'u' with 2 of its children u_1,v_1. let say we want to connect u_1 , v_1 then 2nd term of above equation will become u_1^2+v_1^2+(n-u_1-v_1)^2 . Similarly if want to connect a child of u_1 say u_2 to v_1 then the 2nd term will become u_2^2+(u_1-u_2)^2+(n-u_1-v_1)^2. This expression is less than that if we connected u_1,v_1. So we can say by induction that for any node 'u' we will want to connect 2 of its leaves such that their lca is 'u'. Now if sizes of subtree of node 'i' is denoted by s_i then we can define 2 values for each node: d_i=min(d_i,d_child+(s_i-s_child)^2) and f_i=d_i+(s_i)^2-2*n*s_i. We can show that the second term of above equation can be written as:

if a node 'u' has only one child: n^2+f_child.

if a node 'u' has more than one child: n^2+ f_child1 + f_child2 +2*(s_child1)*(s_child2).

Now our equation was telling us number of extra paths on adding an edge, so it must be positive and for any node 'u' if we subtract the second term from first we get -(f_child) or -(f_child1 + f_child2 +2*(s_child1)*(s_child2)) respectively which means that f_i will be negative. So for any node if we choose 2 of its children such that their f_i are smallest among all children we can get the max number of extra paths added. So we find this for all nodes and find their max.

My solution:55909246

Better call GreenGrape

I have only looked at problem C so far, but it is already enough for me to conclude that it was a brilliant round. Thanks guys!!!!!!!!!!!!

Wasn't Div2-C easier than Div2-B ?

(Give me negative vote).Div2D was easier than B and C.

System testing completed good rate for everyon.

XD I’ll try to write a new one tomorrow ;)

A new meme?

Problem D of Division 2 was very interesting and stumped me. I'm excited to read the editorial. Thank you for the great problems!

I've never waited so long for systest/rating changes!! Good round tho :-)

11 and counting :P

Simple solution for Div2 B.Submission Link : https://codeforces.com/contest/1180/submission/55907361

can someone help me in Div2 problem B.

I am getting wrong answer in test_case #60.

Any hints for div2C? Thanks :)

See what happens after queries become very large

Thanks got AC. :)

Is this true that in d1d optimal path will contain the centroid of the tree? Does anybody have a proof/a counterexample?

What do you mean by optimal path? Could you share some hints about how to solve the problem?

By optimal path I mean the path between vertices which will be connected with an additional edge. The hint is that if we group the vertices by the vertex on the path which is closest to them, only the sizes of the groups matter somehow (you have to minimize the sum of squares of these sizes).

Hmm, don't know about centroids, but there always is an optimal path which connects two leafs.

(Guess it's obvious though)

It's false. This type of graph produces a counter-example:

There are $$$N = W + 2T + 2$$$ nodes. When $$$2(W + 1) > N$$$, $$$C$$$ is the unique centroid.

The orange edge produces an optimal path going through $$$C$$$. The number of simple paths when adding it is $$$2 { N \choose 2 } - { T + 1 \choose 2 } - { W \choose 2 }$$$.

The blue edge produces $$$2 { N \choose 2 } - { W + 2 \choose 2 }$$$ simple paths. Any choice of $$$W$$$ and $$$L$$$ such that $$$C$$$ is the unique centroid and $$${ W + 2 \choose 2 } < { W \choose 2 } + { T + 1 \choose 2 }$$$ produces a counter-example.

$$$W = 17$$$, $$$T = 8$$$ is one such choice.

E869120 may be interested in this type of graph.

Lets give it to him as a gift for his next birthday :D

After reading socketnaut's comment, I wondered that what is the minimum case which all of optimal path does not contain any of the centroid of the tree.

I wrote a brute-force code, and proved that there is no such case which is $$$N=3,4,5,6,7,8,9,10$$$ and $$$11$$$. Seems like socketnaut's counter-example ($$$N=35$$$) could be the minimum.

Source Code of Brute Force: Link

UPD: Finally I realized that socketnaut's second comment means my user photo :))))))):)"Who is this man and why is he trying to sell me this graph."I have some intuition for why this form might produce the smallest possible. Adding leaves to $$$C$$$ is the best way to make it be the centroid without incentivizing the best path to go through $$$C$$$. Or to put it a different way, if the best path doesn't pass through $$$C$$$, we can reformat all of the subtrees that are below $$$C$$$ and away from the best path into leaves attached directly to $$$C$$$. Such a change doesn't worsen the best path and doesn't improve the paths going through $$$C$$$.

Going to the best path, suppose that the blue edge connects some vertices $$$u$$$ and $$$v$$$, and $$$\ell$$$ is their LCA when the tree is rooted at the centroid. If either $$$u$$$ or $$$v$$$ has a "worse" path coming down from $$$\ell$$$, the orange edge can always connect the centroid to the one that is better. So, we need them to be symmetric. Minimizing the path between $$$C$$$ and $$$\ell$$$ and making the trees from $$$\ell$$$ down to $$$u$$$ and $$$v$$$ linear gives the best configuration.

I was unable to solve Div2 Problem B, which was failing pretest #9 repeatedly.

I am still unable to find my mistake. This is my submission 55907969

Please help me to identify my mistake

Thanks!

what is the maximum product for this case

3

1 0 -1

I think it should be

-2 -1 -1 but in some successful submit code i found this one as output

1 -1 -1

It will be 1 -1 -1

What you are suggesting will make the product negative whereas it was earlier zero, so no improvement

what is wrong in this https://codeforces.com/contest/1180/submission/55908255

You need to check your code when there are 0's in the array.

Answer on input 0 0 0 is wrong.

Also, output to -4 -5 -6 3 should be -4 -5 -6 -4, but your code outputs -4 -5 5 3

My solution to Div. 2 D TLEed on TC74 when compiled with MSVC++ while the same exact solution ran in 280ms when compiled with G++. A custom test shows that my solution ran in 1029ms when compiled with MSVC++. Is MSVC++ really that much slower than G++?

Ah that's sad. Probably the constraints were too tight. Even I got TLE & afterwards got an AC just by replacing all cout's with printf.

Agreed. I was only able to get AC using VS by using

`printf`

, not even`cout`

with`ios_base::sync_with_stdio(false)`

ran in time, which I previously thought was only slightly slower than`printf`

. I can't think of why the constraints need to be this tight, since as far as I can tell there isn't an easier solution that needs to be prevented from passing.I am not sure if this is a right place to put my idea/complaint . I am from Beijing,Chine, and in the contest last night , I refresh codeforces.com and m2.codeforces.com for 25 minutes only to find a series of "This site can’t be reached". And this situation is common before. According the comments following the blog of Round569 , people out of China didn't encounter this annoying process. So , I write this wanting you to know what happens in China and hoping for a response. Maybe you buddies can help me to let worker in codeforces know the situation? :)

Try codeforc.es

that site works perfect , with only few seconds to load , which is uncommon in cf. thanks!!!

good English, dude

I am from Shanghai China, I did not encounter the situation you said. Maybe it's because the Great Fire Wall. Because of 70th anniversary of China, the censorship is strong now. I use VPN to visit Codeforces. Try using VPN.

待我肉身翻墙日，youtube上把党夸

I should try this round because I think I can solve all problems in div.2 , but I am afraid that I will get lower rating. Maybe I should be braver.

In the short run, your rating may fluctuate. But in the long run, your rating converges to your skill. Participating and practicing more improves skill. So just calm down and focus on the long term performance. That's how I convince myself to not afraid of a drop in rating and participate as many as possible. Hope that helps.

Hi. So I was wondering about my submission for Problem B here.

The verdict says 'wrong answer multiply isn`t maximal possible', but not something like 'expected X but found Y'.

So, I just want to know whether there is some issue here? I don't see where my submission is wrong

I have also done the same mistake , that you dont have to choose only positive max element. but negative max element (in absolute value) can be better choice .

Eg -5 2 3 Here answer will be 4 -3 -4

Oh no! I messed up the compare function. Should have payed more attention while coding it.

UPD: Changing compare function still doesn't work sadly :(

Again Editorials are late.

This is actually becoming very common these days. Earlier the editorials were published right after the system tests, but now they come really late.

Just read this thread/look at the code in standings, you don't have to wait for the editorial.

the editorial flies away~~ pigeon is walking~~~

Good

So where is the Editorial

if my submission got hacked, then how to know for which test case the submission is wrong??

Resubmit the hacked solution

How to solve Div 2(Problem E)??? Anyone..thankyou

https://codeforces.com/blog/entry/67813?#comment-520927