Привет, Codeforces!
Я рад пригласить всех на Codeforces Round 569 (Div. 1) и Codeforces Round 569 (Div. 2), которые состоится завтра, в пятницу, 21 июня 2019 г. в 19:35. Раунд будет рейтинговым для обоих дивизионов.
Это второй контест от нашего проекта "Обсуждаем задачи". Если у вас есть интересные задачи, то, пожалуйста, присылайте их нам, и, если они окажутся хорошими, вскоре мы дадим их на аналогичный раунд. Вот ссылка на программный пост.
Свои задачи на раунд предложили Иван ScreaMood Фёдоров, Кирилл kirillbogatiy Бессонов, Мухаммаджон Mr.Hakimov Хакимов, Федор ---------- Ушаков, Фёдор Kuyan Куянов и я, Дмитрий gop2024 Григорьев.
Раунд готовили мы, Дмитрий gop2024 Григорьев, Фёдор ---------- Ушаков, Дмитрий TheWayISteppedOutTheCar Пискалов и Мухаммаджон Mr.Hakimov Хакимов.
Спасибо Ильдару 300iq Гайнуллину за отличное координирование раунда, Sooke Sulfox Gnar, Xiuhan sunset Wang, Ziqian TLE Zhong, Junzhao FizzyDavid Yang, Jiaxuan samjia2000 Gao за тестирование, а также Михаилу MikeMirzayanov Мирзаянову за великолепные платформы Codeforces и Polygon!
В каждом дивизионе будет предложено 5 задач и 2 часа на их решение. На протяжении раунда вы будете помогать ученикам одной обычной московской школы в их обычных повседневных делах. Разбалловка раунда будет традиционно объявлена ближе к раунду.
Прочитайте условия всех задач. Всем удачи и высокого рейтинга!
Ждём вас на контесте!
UPD Разбалловка Div.2 раунда стандартная — 500-1000-1500-2000-2500
Разбалловка Div.1 раунда — 500-1000-1500-1750-2250
UPD2
Вот список победителей:
Div.2
Div.1
Наши поздравления победителям!
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 Sulfox.
Ура, вроде авторы преследовали цель составить нормальный контест, а не ознакомиться с системой Polygon. Завтра убедимся :)
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 meanXiuhan
.(Sorry for my poor English)
IOI Chinese testers team lol
A 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
you cleverly wished for yourself. Nice
In fact, Sulfox's name is not Sooke Gnar. However, he loves Gnar —— The Missing Link very much.
Chinese people have interesting names
один из авторов контеста исчез(((
This 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!
New Codeforces round, new chance to fall!
You're so cool :0
You're cool! You're all cool!
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.
Разбалловка раунда будет традиционно объявлена ближе к раунду. Собственно, где? UPD: во
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.
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 is10^18
. Obviously, it shouldn't work because overflow.https://mirror.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://mirror.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 masterHow 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.
Yes 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.
Using 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://mirror.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://mirror.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 .
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.
please help me to identify my mistake in problem B https://mirror.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
.
Correct sequence
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.
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
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.
Why is there a hacking phase? I suppose only Educational rounds have that phase.
Delay in System tests?
Один из худших раундов за последнее время
Can Someone explain why their code give TLE -
https://mirror.codeforces.com/contest/1180/submission/55899448
https://mirror.codeforces.com/contest/1180/submission/55903257
use '\n' instead of endl
Is there again power outage??(Delay in systest)
Looks like Systest won.
memewoosh
Сколько элементарных операций в секунду могут выполнять сервера на cf?
Квадратичное решение 55897039 к задаче 1180C - Валера и дек на max-тесте при попытке взлома отработало за 3244 мс. Я, конечно, понимаю, что TL в задаче 6 секунд, но все равно неожиданно.
Is there a hacking phase? I suppose only Educational rounds have hacking phase.
Yes, only Educational rounds and div 3 rounds
It happened to me for the first time, My solution was hacked midway between the contest, I tried to figure out the mistake but was sure it was correct. After some time I got a notification that my solution was correct :D
Link : https://mirror.codeforces.com/contest/1180/submission/55886651
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://mirror.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
If $$$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 :(
gop2024 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://mirror.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.
Hackforces
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
Nice round. I liked it.
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?
I've never waited so long for systest/rating changes!! Good round tho :-)
Can someone help me in Div2 problem B.
I am getting wrong answer for test_case#60.
Кто-то еще сочувствующе посмеялся с начала задачи B? :)
"На свой 5 день рождения Коля получил от мамы в подарок новенький массив.."
11 and counting :P
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
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.
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 evencout
withios_base::sync_with_stdio(false)
ran in time, which I previously thought was only slightly slower thanprintf
. 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.
the editorial flies away~~ pigeon is walking~~~
So where is the Editorial
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://mirror.codeforces.com/blog/entry/67813?#comment-520927
Problem D: I submitted Submission 1 but it was showing 'TLE'. But then I again submitted by just changing 'endl' to '/n' and it got submitted. Accepted Submission. Please explain why this happened?
endl always causes a flush oepration, "\n" does not!Thats why endl is slower.
How to solve Valeriy and Deque? I have used this code (python) but I am getting TLE in case 4 ~~~~~ n, q = map(int, input().split()) s = list(map(int, input().split())) query = [] for _ in range(q): query.append(int(input()))
~~~~~ Please any help will be appreciated
Queries can be up to 10**18. Don't you think it is kinda big number, u know?
Yeah. Could you suggest a better solution? I saw various accepted solutions but its hard to understand the logic of whats happening there
After make the biggest number in the first place... Guess what will happen then.
After making the biggest element first all the element in the second place will move to the last position. And that would be a cycle. I under stand the part when the query is smaller than the position of biggest number in the list. But when the query is bigger than that no matter what the first number will be the biggest number but I do not understand a way to figure out second position number.
I have seen the editorial and don't understand how they got the index position of the second position number.
Just use an array to record the answer of a cycle. Record the length of a cycle as well. To a big query, notice that the answer is related to (query_num — p1)%p2 , where p1 is the length of getting the biggest number as the first number and p2 is the length of a cycle. https://mirror.codeforces.com/contest/1180/submission/55891794 You may refer to my solution.
Can someone prove the correctness of 55895158 (Div.1 D)? I calculated the answer using a method similar to the tree diameter. I just guessed it but don't know how to prove it.
May I get the editorial for this contest? gop2024 for Contest #569 (Div.2)
Can someone help me understand div1 D? I can't see why in the first sample case the answer is 2. Won't he just add an edge between both nodes, then there can only be one simple path containing both edges that goes to both nodes? Otherwise it would break the rule "we consider only simple paths of length at least two".
Ok, after examining the second sample case I get the idea that "length two" means two nodes and not two edges, is this proper? And I assume "loop" refers to self-loop?
Can we get Editorial for Contest, please? Thank you.
Can someone help explain their thought process for Div 2 D?
All the questions were long,except problem a.
You can reach red while reading one problem in under 5 minutes.
is there a solution for problem C ?