Hi all!

This weekend, at Dec/20/2020 18:05 (Moscow time) we will hold Codeforces Round 692. It is based on problems of Technocup 2021 Elimination Round 3 that will be held at the same time.

Technocup is a major olympiad for Russian-speaking high-school students, so if you fall into this category, please register at Technocup 2021 website and take part in the Elimination Round.

Div. 1 and Div.2 editions are open and rated for everyone. Register and enjoy the contests!

The Elimination Round authors are neckbotov and anta.baka. Thanks to Nebuchadnezzar and KAN for their coordination. Also huge thanks to testers for their invaluable help: isaf27, 300iq, Kaban-5, low_, Shinchan01, wiwitrifai, Ashishgup, spar5h, Nemo, Gauravvv, Vax, XLor, Um_nik, ADJA, jiufeng, RobeZH, Daryusz, antontrygubO_o, Normie28, kalki411, gratus907, manik.jain!

Have fun!

Elimination Round will feature 7 problems, preliminary costs are

**500 — 1000 — 1750 — 2000 — 2250 — 2750 — 3250.**

Div. 2 will feature 6 problems, preliminary costs are

**500 — 1000 — 1750 — 2000 — 2250 — 2750.**

Div. 1 will feature 6 problems, preliminary costs are

**750 — 1000 — 1250 — 1750 — 2250 — 3000.**

The analysis is published.

The round is over, congratulations to the winners!

Technocup 2021 - Elimination Round 3

Codeforces Round #692 (Div. 1, based on Technocup 2021 Elimination Round 3)

Codeforces Round #692 (Div. 2, based on Technocup 2021 Elimination Round 3)

))

Don't forget to notice the unusual start time!!!QAQ:'(

That's not KIND!

I think some registration cleanups need to be done after the rating update from the previous contest

https://codeforces.com/contestRegistrants/1465?order=BY_RATING_DESC

https://codeforces.com/contestRegistrants/1464?order=BY_RATING_ASC

agreed

also, please update the colors, MikeMirzayanov.

Thanks, I'll do it tomorrow before the round.

nice observation, never thought about this.Hoping for a good contest :)

I am unable to type in the city name in the Technocup registration page(the input box isn't working ).Can anyone help?

As a person who is familiar with the anta.baka and neckbotov, I think that Russian-speaking high-school students are in good hands. I can assure you that everything will be all right with the contest, because anta.baka's passport is in my pocket.

Please return my passport. I couldn't buy beer for six months.

RIP passport...

How can I improve?

Practice. Lots of it.

learn and practice every day

I hope that I reach Pupil after this contest.

Just because I'm newbie i recieved a lot of downvoting just because a wish good luck, omg...

I think I will also reach pupil after this contest xd

Spread the greenery!

As a tester, I say that Problems are Interesting :)

Every tester says the same thing.

and every participant contradicts it, lol.

In letter from Mail.ru was said that contest will start 20.00 MSK, but here there is other time.

sad != said

Sorry, I don't know English very well :)

.

There are literally thousands of blogs related to your question (Google?) and why are you asking this here in the contest announcement blog? :/

P.S: registered 7 months and still new KEKW

Scoring distribution??

please anta.baka, neckbotov

Elimination Round will feature 7 problems, preliminary costs are 500 — 1000 — 1750 — 2000 — 2250 — 2750 — 3250.

Div. 2 will feature 6 problems, preliminary costs are 500 — 1000 — 1750 — 2000 — 2250 — 2750.

Div. 1 will feature 6 problems, preliminary costs are 750 — 1000 — 1250 — 1750 — 2250 — 3000.

I am gonna reach pupil.

good luck

thanks a lot

Is it just me, or does the scoring distribution of Division 2 seems a bit scary?

just you.

Well, now notice the difficulty gap between B and C. There's a reason why I mentioned that.

Yes. Scoring for C is mostly 1500(or less)

is it rated?

Div. 1 and Div.2 editions are open and rated for everyone. Register and enjoy the contests!*Me after doing A and B:

Let's check comment sectionSame :((

Because we are not pro :((

This is why you are not improving. You should try C

Pretest 4 ruined the party for me... Looking forward to the solution to this one! :D

OK

I have a doubt, for a problem if i did wrong submissions and didn't solve that question in the contest, will these wrong submissions have any effect on my ranking?

No.

What's test 5 in div2C (after contest)

Tell me test 4 (after contest)

try 6 5 1 2 2 3 3 1 5 6 6 5

Try this-6 5 4 1 3 2 2 3 5 4 4 5 Ans — 7

If you mean this

The input is not correct, Row 1 and 5 can not have rook at Col 4.

This is what i fixed to pass pretest 5 personally

Ans is 2. Isn't it?

Yeah. My problem was I was only considering movements in one direction, so this broke my code.

My code gives correct ans for this- 2 but still fails pretest 5.

I am getting 2 for this, what is the correct one?

thanks , seems that i have found whats wrong with my code

try 6 5 1 2 2 3 3 1 5 6 6 5

Getting 7

is ok..hmm.. I am really curios now about your mistake

https://codeforces.com/contest/1465/submission/101887567

I tried this, ans is m initially. For every rook (i, i). Decrement ans. For every cycles formed by other rooks, increment ans.

Idk why it isn't correct

i think your cycle finding is wrong. It's a directed graph, so you need at least three modes of visited (untouched, active, completed).

I'm also getting 7 but getting wa on pretest 5.

Can C be done using number of cycles count?

Yes, initialise ans = m, for every cycle increment ans, for every rook at (i, i) decrement ans

Oh! I got stuck in debugging the same!!

Implemented this and got WA on test 5. How?

Try this test case — 1 5 4 1 2 2 3 4 1 5 5

Correct answer is 3. Many incorrect codes will output 4.

Thanks! My code is giving WA on this. I understood my mistake.

Implementation mistake. How to implement correctly?

I wrote a recursive solution Code

I also done it using number of cycles count and same i also got WA in pretest 5 . Maybe you also done same mistake . During checking cycles , some cycles are not exactly cycles. ( means 1 2 3 but 3 to 1 not possible ) But in last i changed and it got accepted .

my answer is 3 and i'm still WA on test 5

Same for me. Was it wrong answer on the 45th output? Did you find what was the error?

i'm WA on the 213rd output

OMG okay. I figured out my issue though. Initialization problem.

Yep, I passed the pretest. Don't know about system test though.

Yeah, any rook on the diagonal contributes 0 to the answer.

Any rook not on the diagonal contributes 1 to the answer.

Additionally, any cycle contributes 1 to the answer.

This is optimal because moving a rook already on the diagonal off the diagonal is a waste of moves. Any rook not on the diagonal needs at least 1 move to get on the diagonal. And any cycle of $$$n$$$ pieces needs $$$n+1$$$ to resolve (you need to move a piece to a free column/row to remove the cycle, put $$$n-1$$$ pieces on the diagonal, then move back the original piece to the diagonal, for a total of $$$n+1$$$ moves)

Can you please share your code?. Mine is bit lengthy and unreadable.

Not sure if you can see it now but it should be visible once system tests finish (and I hope mine passes :P link)

Aah! This $$$D2C$$$ today:

how to solve c??

ignore all points on diagonals. for every other point, connect every 2 sharing x or y.

for each connected component, check if at least 1 point can be moved to diagonal in 1 move.

if so, ans += no of points in the component. otherwise, ans += no of points in component + 1

did the exact same thing , got wrong answer on pretest 5 . any case i may be missing ?

Some hack tests:

5 4

1 2

2 1

4 5

5 4

Then the answer is 6.

For each rooks $$$(x, y)$$$, add an edge between $$$x$$$ and $$$y$$$.

For each connect component, if it is a tree, the answer of this component is the number of rooks. And if it is a cycle, the answer of this component is 1 + the number of rooks.

this approach also giving wrong answer

Oh, maybe you forget considering $$$(x, x)$$$ ? And this rook is ok, and needs no move.

okk thanks

can u explain the intuation behind it? pllzzzzzzzzz

When I tested this round, I firstly guess the answer is $$$m$$$ or $$$m+1$$$ (remove rooks at $$$(x,x)$$$).

The difference between this two case is that the set of x coordinates and the set of y coordinates. You can see that if these two sets are same, then the answer is $$$m+1$$$, otherwise $$$m$$$. Like 2 rooks $$$(1,2)$$$ and $$$(2,1)$$$, the answer is 3 because $$${1,2}={1,2}$$$. If the first rook $$$(1, 2)$$$ wants to go to $$$(1, 1)$$$, but $$$(1, 1)$$$ is banned by $$$(2, 1)$$$. And if the first rook wants to go to $$$(2, 2)$$$, $$$(2,2)$$$ is also banned by $$$(2, 1)$$$. Is it like a cycle?

And 2 rooks $$$(1, 3)$$$ and $$$(2, 1)$$$, the answer is 2. The first rook goes to $$$(3, 3)$$$, and $$$(2, 1)$$$ goes to $$$(2, 2)$$$, this may be a chain.

However, the above conclusion does not work only when the board can be split into many parts, like the above hack test. And then add an edge between x coordinate and y coordinate may be a trick with DSU. There is a similar problem 1013D - Химическая таблица. Finally, if you do this, you can get the above conclusion.

Can u explain how you are taking an edge between the two cells of the board?

If you can explain with your above example it would be really helpful.

Solved. Thanks

How to do D2C ?

I think Div 1 Problem E can turn into : the probability of choosing some number from the sg numbers that =0. Am I right?

If I am right , how to compute? Using basis?

It turns into "compute probability that the resulting Grundy number is $$$x$$$, for each $$$x$$$. You can write a classic recurrent probability formula $$$p(x) = \frac{(x = 0)}{N+1} + \sum_{i=1}^N \frac{1}{N+1} p(x \oplus g_i)$$$ and turn it into Gaussian elimination since the Grundy numbers of vertices are $$$0 \le g_i \lt 512$$$ (approx. $$$\sqrt{M}$$$).

I'm so sad, during the contest I (wrongly) concluded that the grundy values can only be 0 and 1, therefore we have just 2 states in our linear system, and Gaussian elimination isn't needed Q_Q

Followup question, which might be stupid: is it true that under modulo M, if you have $$$a = P_a*Q_a^{-1}$$$ and $$$b = P_b*Q_b^{-1}$$$, and you take $$$c = a * b $$$ $$$=$$$ $$$P_c*Q_c^{-1}$$$, that the $$$P_c$$$ and $$$Q_c$$$ are automatically coprime and you never need to do any GCD-ing?

I think it is but I'm not 100% sure, thanks.

You should notice that modulo $$$M$$$, a fraction $$$p/q$$$ is the same as $$$pa/qa$$$ for any integer $$$a$$$ coprime with $$$M$$$. We don't care if the numerator and denominator are coprime with each other, only that the denominator is coprime with $$$M$$$ — which makes sense, they represent the same thing. You'd only care about the exact values when printing fractions or dealing with some operations like "add square of denominator to numerator".

Of course the Grundy values aren't just 0 or 1, take a semicomplete DAG.

Thanks! I got AC

So the time complexity of the Gaussian elimination part is $$$O(M\sqrt M)$$$?

Yes,it can pass in $$$O(M\sqrt M)$$$. Though I found this dp transformation in the contest,but I didn't realize the size of dp status is up to $$$\sqrt M$$$(Maybe I'm not familiar with sg numbers),and I focus in finding the probability of "Xor equal to zero".In fact I have never seen the problem which need Gaussian elimination to update dp. It's a good problem ,thanks!

Do you know those annoying implementation problems that have like 100 cases? Well, C is the perfect example of it. :))

C is a graph problem.

can you tell your approach

I think it can also be done using arrays (to find cycles).

Yep storing y coordinate for every x coordinate and then looping till you get the initial x or some x which has no y. If you get your initial x you found a loop otherwise you didn't. Keep marking the visited vertices.

Yeah I did the same but..

(pretest 5)never mind.How? :/

What's the solution for Div2C/Div1A ? I did it by counting the number of cycles formed in the graph when each rook position (x,y) is connected to (x,x) and (y,y), and then added it to the number of rooks not on the main diagonal.

I'm sure there must be an easy solution.

mine is also the same I don't know why it's getting the wrong answer

For each $$$(i,i)$$$, connect the rook in row $$$i$$$ with the rook in column $$$i$$$ with an edge. Discard self-loops. The resulting graph is a union of cycles and paths, the answer is number of vertices + number of cycles.

can explain the intuition behind it??

Take a path. You can move one rook from one end to the diagonal, shortening the path. For a cycle, you can't do that, so you need at least one extra operation with an unused row/column ($$$M < N$$$ so it's always possible), and using that operation turns this cycle into a path.

Worst Div2B ever. I thought I'd get TLE with simple brute force approach but then I looked at the number of submissions.

how does that make Div2B worse if lot of people solved it fast and you didn't

Because a lot of people (including me) solved it by looking at speed at which people were getting AC.

How to solve B?

Keep increasing n until you find the one satisfying the required property.

is this a joke?

Only after you get AC.

I need to look at the constraints more

There exists at least one valid answer every $$$9!$$$ which equals $$$362880$$$. To be more precise, LCM of $$$1, 2, 3, 4, 5, 6, 7, 8, 9$$$ is $$$2520$$$, so at least one valid answer exists every $$$2520$$$. That's why you can do a linear search.

I wish I had thought this. I wrote the correct ans and them keep worry for next 2 hrs hope system test won't break my solution.

Every 2520th number has this property, so just brute force for each number from N to the next multiple of 2520. You could have also run a simple while loop, but that gives no proof to why it won't TLE.

For anyone wondering how 2520, it is the lcm of 1 2 3 4 5 6 7 8 9.

standings are available to everyone so you can see and guess whatever you want.Though i proved myself .

"standings are available to everyone so you can see and guess whatever you want" ==> And when whatever = solution, that makes a problem worse.

I'm damn sure 90% of the people solved B without even thinking of its complexity ,more like they just guessed it and you dont't expect it from DIV2B level problem.

Btw were you 100% sure that your code will get AC and not get TLE verdict?

yes i was 100% sure . I calculate 9! and used similar to pigeonhole principle to prove it .

Well I was sure, but again who knows about such a strict time complexity.

I checked we would get an answer in max 2520 iteration since 5*7*8*9 would include all the numbers in it. But again instead of using 2520 I used 3000 which sadly made me cost -167 rating :(

Good to see I am not the only one who is afraid to implement a brute force solution. I thought about brute force after just reading the problem but i was afraid it might give me TLE. But I did submit it and got ac

Same bruh.... it was only after I saw the brute force implementations that I realized that only a maximum of 2520 numbers needed to be checked. :") I should've moved on to C. :"(

The lcm of numbers from 1to9 is 2520 so it does not take more than 2520 for each test case if one does by simply increasing n and checking its fair or not

I was worried as well, but i've tried generating several cases and noticed that the number of iterations would always be pretty small, hence a brute force would pass.

LCM of first 9 natural numbers is 2520. So brute force will work.

Solved A, B , D in last 10 minutes it was thrilling experience.

Found Div2D to be not that difficult. Don't know why so fewer solutions.

Because Div-2 C seems more interesting.

I started 1hr late, solved A and B in <20mins and then lost hope after C and then went to play chess. Does C require some advanced data structure or algorithm?

I don't think it requires some advanced shit. I think it's just something simple that we did not quite figure out.

why do you use 1e9+7 in D and 998... in E? congratulations, you have trolled me. I hope your problemsetting career has ended today.

Congratulations for not copypasting modulos.

There should have been an example testcase for D which checks for the correct modulo.

Some testers noticed that but we were short on time and I didn't want to change anything. Definitely a thing to consider when problemsetting.

You can't really give big tests in samples.

Actually you can, as a downloadable file.

i was low on time after coding D so i forgot to recheck the modulo...

You're not supposed to "recheck". You're supposed to copy-paste. If you did that, you'd have more time too.

I should've used Zashikhin prime. I'm deeply sorry for your disappointment which I believe is immeasurable.

When will be system tests?

Why templates are evil Karma lol

unfortunately, this is another case because I haven't used any templates

Do you also ignore other parts of statements when solve? I wouldn't write it in this way if you weren't so aggressive. You should try to be more polite

Tell it to Errichto (comment)

And if I politely asked,

"why do you use 1e9+7 in D and 998... in E?", would you apologize?You impolitely hoped that the authors' problem setting career has ended today. I agree that it would be better to use the same modulo in both problems. I could apologize before someone else who is not so toxic

Ok thank you for the answer. Sorry for being impolite.

And I'm sorry for such inconvenience. Next time I'll pay more attention to it

No worries, man. Just funny to see you complaining about modulos.

Umm...It's a woman

i'm a man

okayy

I got absolutely destroyed!

My solution to D1C passed the 21 pretests but I found a NullPointerException hack right after contest ended :'(

Second day in a row with E<D<C XD

Big fan of yours :)

I found C pretty easy. The last 2 signs obviously have to be + and -, but then for any string, we can always proceed from the last operation and "merge" a sign into the next sign if they're different, so that lets us turn any sequence of — to one -, any sequence of + (except the last, which is fine here) to +, and when we're left with +-+-+, that can be reduced to + as well. The rest is some careful implementation.

Can anyone prove why brute force works in B? I calculated such numbers upto 10, 000 only to find a pattern!

LCM of all digits from 1-9 is 2520. So max 2520 iterations

lcm of 1,2,3..9 is 2520. So it is guaranteed that there exists at least one fair number before n+2520

Numbers that divide all possible digits occur at most every 9! numbers, which is 300k

I registered for this contest but by the time it started, I was wavering from participating in it as I have never successfully submitted a solution before this. I entered late in the contest and ended up solving and submitting 2 problems...successfully. :/ Weird eh?!

In DIV2 C did we have to count the no. of cycles?

Yes https://codeforces.com/blog/entry/85746?#comment-735295

Okkk, Thanks

Hi . This contest was not designed like the previous contests because until the second question the questions were designed at the ideal level, but from the third question onwards the level of questions was very high and this was really a big weakness

I read there are solutions to problem E that don't utilize the fact that the nimber is at most $$$\sqrt{M}$$$, and works in $$$O(N\log{N})$$$. How do those solutions work?

Suppose that all Grundy numbers are in the range $$$[0, 2^d)$$$. Then, let $$$c_i$$$ be the number of vertices with Grundy number $$$i$$$, by definition, all $$$c_i$$$'s are nonnegative integer and their sum is $$$n$$$. Let $$$p_{k, i}$$$ be the probability that after $$$k$$$ steps of the first type the current Grundy number is $$$i$$$ (including the fact that $$$k$$$ steps may not even happen, so $$$p_{k, i}$$$ go to zero as $$$k$$$ increases). Then, we have a very simple formula: $$$p_{0, 0} = 1$$$, $$$p_{0, i} = 0$$$ for $$$i \neq 0$$$ and $$$p_{k + 1, i} = \sum\limits_{j=0}^{2^d - 1} \dfrac{p_{k, i} c_{i \oplus j}}{n + 1}$$$.

In other words, $$$p_{k + 1} = (p_k \cdot c) / (n + 1)$$$, where by $$$\cdot$$$ I mean the Hadamard product of vectors. Because $$$p_0 = 1$$$, we get $$$p_k = c^k / (n + 1)^k$$$ (again, $$$c^k$$$ here means the $$$k$$$-th Hadamard power of $$$c$$$). Hence, the probability to end with Grundy number $$$0$$$ is the $$$0$$$-th coefficient of $$$\dfrac{1}{n+1} \sum\limits_{k=0}^{+\infty} \dfrac{c^k}{(n+1)^k}$$$. Indeed, to finish, we need to make $$$k$$$ steps of the first type (summands on the right) and then a step of the second type (multiplier on the left) for some $$$k$$$.

Now, we can find the Hadamard transform $$$H(c)$$$ of $$$c$$$. Because Hadamard transform is linear

($$$H(\alpha f + \beta g) = \alpha H(f) + \beta H(g)$$$, if $$$\alpha$$$ and $$$\beta$$$ are numbers) and multiplicative ($$$H(fg) = H(f) H(g)$$$), we can get the coefficients of $$$H \left (\dfrac{1}{n+1} \sum\limits_{k=0}^{+\infty} \dfrac{c^k}{(n+1)^k} \right)$$$ just by replacing each coefficient $$$x$$$ of $$$H(c)$$$ by $$$\dfrac{1}{n+1} \sum\limits_{k=0}^{+\infty} \dfrac{x^k}{(n+1)^k} = \dfrac{1}{n+1} \cdot \dfrac{1}{1 - x/(n+1)}$$$.

Finally, just apply inverse Hadamard transform to $$$H \left (\dfrac{1}{n+1} \sum\limits_{k=0}^{+\infty} \dfrac{c^k}{(n+1)^k} \right)$$$ that we just found. The probability of Bob's win is the $$$0$$$-th coefficent of the result.

There are no issues with division by $$$0$$$ here: because $$$c_i$$$'s are nonnegative integers with sum $$$n$$$, the coefficients of $$$H(c)$$$ are integers from the range $$$[-n, +n]$$$. Hence, $$$1 - x/(n+1)$$$ can't be $$$0$$$ modulo $$$998244353$$$, because otherwise $$$n + 1$$$ and $$$x$$$ are equal modulo $$$998244353$$$, meaning that $$$998244353 \leqslant 2n + 1$$$. In fact, this solution proves that there are no bad tests (tests, where the denominator of the answer is divisible by $$$998244353$$$): there are no bad tests

exactlybecause there are no issues with division by $$$0$$$ in this solution.This solution works in $$$O(n + d \cdot 2^d)$$$, if the input is just $$$n$$$ numbers from the range $$$[0, 2^d)$$$.

It's not an improvement on complexity but you can in fact save yourself the inverse transform, since the sum of all coefficients in the forward transform is $$$2^d$$$ times the $$$0$$$-th coefficient in the initial vector (every other coefficient cancels out).

This is easier. Consider the string as sequence of numbers

`2^(s[i]-'a')`

. Last two numbers always will wid fixed signs:`s[n-1]`

is positive and`s[n-2]`

is negative. Other numbers can be with any signs. There are`2^(n-2)`

ways to distribute signs, but it's possible to find the desired distribution by the binary search principle. Sort the array of`n-2`

numbers by descending, then iterate over it. Initially all signs are positive. For each number find out, whether you have to change the sign of this number. This is necessary only if and only if the sum of all`n`

numbers after changing remains greater or equal to`t`

. If after iterating this sum is equal to`t`

answer is`Yes`

Why don't you like my approach???

You are answering for Div2E whereas the above discussion is for Div1E.

This problems have same letters, I didn’t understand. But 9 contribution points cannot be returned

contribution points are also absolutely irrelevant

It's still a shame that the minus dirts my profile. It's not beautiful!

In past I thought that contribution is how much money are donated by him

(I still bad know English, I'm Russian. Fixed me if.)

I was very close to this solution during the contest but I didn't know about the

linearity propertyof Hadamard Transform, which is why I couldn't proceed further. I have read a few articles on FWHT(including serbanalogy's blog) but never saw this property anywhere, can you suggest some source where I can learn more Hadamard Transform and its properties?Thanks a lot.

You participated in contest ? I can't see the contest in your contest section .

I hate D1D...

Saw the contest only half an hour late, tried solve ng C directly. Figured everything out found connected components on the fly, ignored the piece on the diagonal. For any connected component with possibility of direct diagonal move, +total pieces in cc, else 1+ total pieces in cc. But pretest 4 failed. Very sad. Three wrong submissions already. Can someone tell me where I went wrong?

https://codeforces.com/contest/1465/submission/101904830

Can anyone help explain the idea of D2D? Thanks!

In today's Div2 ~ C problem: // after contest

My code's link : https://codeforces.com/contest/1465/submission/101896978

As far as I think my complexity is O(3*m) => O(n) But I got TLE can anyone explain me why it got TLE

one of your last lines of code: while(!empt.empty()) empt.pop(); You didn't include that to your complexity. Also, you have this same loop inside of O(m) so you'd get O(m*n), right? Also

That is also O(n) so, as far as I know multiple O(n) is O(n)

You can use heading little shorter .I thought you were giving solution .

It's because inner for loop can run 'n' times in worst case thus m*n complexity .

I just edited , thanks I used inner loop as a confirmation for not to have runtime error As far as I think the queue should contain the extra index of the empty (row,collumn) so as the queue should always provide that then the inner loop should not work :(

xD

It's more about Div2: D

Am I the only one solve D2C without modeling it as graph and write very long and stupid code 101886029?

Insane !!

For Problem D (div.2) Greedy Solution WA test case 9: Dude wtf was with that D problem? I figured I would start off the round by solving D first since it would be 6 problems D should have been solvable. Anyway I read it and I figured if I went greedy it would work since for any test case that I could come up with greedy solution worked. When I say greedy what I did was from left to right when meeting a '?' I know the '1's and '0's before (two counters) and after (this can be done with a sum array from right to left) so I can figure which one is better to put. Can anyone please give me a test case where this doesn't work? I was getting WA in test 9 with greedy solution. Also for the cases where I would get the same cost I went recursively and tried both solutions to see which would give the best answer. Again I did not get TLE but a WA in test case 9. So please somebody give me a test case now that the contest is over. Also let's say greedy doesn't work, what kind of a DP solution would work, like I just need a complexity? Though I don't think a DP solution would work either. This problem must have the need of some really sophisticated data-structure/algorithm combination like Treaps with matrix exponentiation or some. But if you are gonna say 6 problems then make D at least solvable. Look at how many people solved C and how many solved D it's insane. Oh I can see why now... it's because they mostly used orange and red testers. Dude like if you are orange you know every algorithm known to man and every technique you have it already memorized. Competitive programming started ageing like chess smh.

If

`x>y`

, all`?`

will filled by one of sequences like`11...100...0`

, from`000..00`

to`111..11`

. In the other case, iterate over all sequences like`00...011...1`

my code for div2 C is ans=m, decrease if x==y, increase if a cycle is found. my solution solves all test cases suggested in the comment section. and still WA on test case 5. help pls :) Edit: found my mistake, got AC.

Can anyone explain div2D .Thanks

Consider all

`?`

positions. If`x>y`

, in the optimally case all the positions with`?`

filled by sequence like`11...100...0`

. Iterate over all possible sequences beginning a sequence with all zeroes. Next sequence is`100..0`

then`1100..0`

and etc. until sequence with all ones.In order to maintain the answer for each sequence, precalc for each position from 0 to n, number of

`0`

and number of`1`

to the left and to the right of this position. While iterating the sequences you recalc the numbers of`0`

and`1`

`to the left`

after each position with`?`

If

`x<=y`

, iterate over all sequences from the other side:`0..000`

,`0..001`

,`0..011`

, ...,`1..111`

and recalc the numbers of`0`

and`1`

`to the right`

after each position with`?`

why some people are getting TLE in B ?

I saw some of them use unordered map, i believe it has more constant factor(not sure), therefore failing the 2 sec time limit.

That must have made them MAD since there are less submissions in C...

Time Limit is 2 seconds in B

Thanks! Updated.

Why was there so weak pretests in B?

If you mean that actually brute force isn't acceptable, then I will tell you that it can be proved it's acceptable

pretests are not weak, the time limit is too strict :(

1000 TLEs for problem B :))

I think you should make the test set to more simple and rejudge. 1000 points to such is rationable.

A strategy to divide n by each digit just once, but adding a small log(n) factor gives TLE. come on!!

It was more than 1000 :(

And I am one of those people. This contest ruined my sleep. XD. Gonna practice some questions.

At first I thought the brute force solution for problem B would give TLE . But after seeing the rate of AC's on B got me thinking if the brute force solution should just do the job. I did the brute force solution , but ended up getting TLE on test 11 . P.S. I used PyPy instead of Python3 but still got TLE.

I got TLE in Div2 B. I used the obvious iterative approach i.e. keep incrementing value until a value is encountered which satisfies the condition.

The only possible reason for TLE I reckon is I used maps to store frequency ( occurrence ) of each digit.

Why such strict time-limit? :| This is really frustrating, even if time limit was INTENDED to be strict, why were the pretests weak? Why so much intricate optimizations were expected in div2B? 101865684 P.S. I am losing 160 points today!

Yeah that's the reason. I used set and got TLE too :/

Yes. anyone who has added a log factor has a TLE. I dont see the point of such tight limits.

I also think it is not reasonalbe to fail. Because we only want to store 9 digits in unordered_map, there is even not much collision for hashing. That strict time limit is meaningless.

Agreed. anta.baka I am not being rude but I'd genuinely like to know, from experienced coders and problem setters about their views on the FSTs of problem B.

I personally didn't expect FSTs. T * LCM * log sounds good in theory.

Sorry it is T*LCM*18*LOG SO 1000*2520*18. Anything extra to that will be costly. 18 can not be ignored as it is too close to TL

i have also got Tle!!!!! why so strict time limit???/

That’s surprising, the exact same code works with std::array<bool, 10>. Does it fail with unordered_set which does the same thing but is constant time? I would guess not since N is only 10, asymptotic complexity doesn’t matter and you’re only comparing constant factors. You Can also cut out division by 1 by adding x%10>1 but like you said that’s really tight.

i think problem B is such a bad problem for a contest.

When the editorials of this contest will released??

Please Check problem B , it is bruteforce i agree but looking at c++ submissions they are getting accepted with fast i/o. Java solutions should be given consideration in such problems.

I was supposed to get +73 (and get my all-time high), but after system tests for B failed -23. Such a pity that 1000 other people failed system tests. A disgrace.

Storing the result made the difference

Hey, how were you able to determine these +73 and -23 numbers. Can you please tell where I can find them.

Here

Thank you

download the extension on chrome of Codeforces predictor or use codeforces live bot . BTW Todays contest was horrible for me , I solved C just after 2 minutes of contest ending and thus it is counted as upsolved (which is not wrong), but after this I Got a TLE in B as well , Due to a small log factor , log factor of 10 :(

Worst Problem B I ever came across. Problem B is not equally good for all the available programming languages

Agreed 100%. And I've seen quite a few Bs in my life.

NO DIV2 B was simple simplehere is my solution

No one said it’s hard. I just said it’s bad because Python solutions couldn’t pass and pretests were weak.

ohk, btw i don't know exactly how much slow python is than c++.

this soln in pypy passed. ps : but i still support the fact that time limit was strict for py coders and one tester should use py.

Most python solutions got TLE.

Using python the implementation was quite simple and short . That's why most of the people chose python over c++ for div 2B.

Interesting to see that all but one Python 3 solutions TLEd in system testing for Div 2 B.

The one that passed test 11 (system), used an LRU cache. Test 11 was all the same number. 101880982

That is not acceptable, problem-writers.

I thought that PyPy should be used most of the time anyway?

optimizeForce not codeforce

Absolutely Correct

There should be a re-evaluation for B anta.baka neckbotov

Yes, Python solutions with the same logic as C++ solutions

shouldpass.Come on. There are a lots of problems that if you want to get AC with python, time limit should be 30 second.

People with same logic for B, someone getting TLE, someone getting AC. I've seen adhocforces, mathforces, but now optimizeforces ?

True, also almost all solutions in python failed B! B needs re-evaluation!!!

I've seen such solutions in Python itself, where both have same logic, but one is giving TLE and the other is giving AC. The only difference was:- one was using list, one was using string.

But it is not optimization . How can you know your code will get FST after getting pretest passed in 125 ms where limit is 2000 ms . Why will u optimise ur solution in this case?

Yes you are right, I would say that the Testcases were not appropriate.

For example see this two submuissions. AC TLE

After having 20+ testers, it is very sad to see there are 1000+ system test fails on problem B (mostly for python3). It is advisable to keep at least one python coder as your tester

This Contest should be unrated, Problem B is not equally good for all the available programming languages

Why do I get TLE on main test cases for problem B? What the hell man! I don't think this was supposed to happen

Edit: my solution is cpp !!

Many who used a set/ map/unordered_map got TLE.That's really sad :(

[deleted]

"Ever" is a bold statement (polite substitute for exaggeration)

No, the problems are good bruh...I didn't read after D though

With this problem B, I came from cyan to almost gray in one week and the next contest is 10 days later, how should I survive the depression? XD

start a 9-day vigorous practice session, hope you'll bring out the fire in good bye 2020!

anta.baka problem B should be rejudged ... why so strict time limit??

Good evening Codeforcess. I got an unpleasant situation, I sent a solution to problem B in Python. The pretests were passed, but on system testing I gave out a TL, on the finalization, I sent the same solution to PyPy and it was within time. I understand that it is hardly possible to do something already, but if suddenly someone tells me where to turn, I will be grateful) In general, this situation, unfortunately, is not the first time, maybe someone can tell you when it is better to send solutions to Python, and when to PyPy. I would also be very grateful. All high ratings)

My rating prediction just went from +100 to -100 only because of storing digits xD

mine from -32 to -132 also because of storing digits. RIP ratings :(

The biggest of the poor mistakes I have ever made. I wonder how storing results can make difference in a problem.Such a bad problem in Div2 B.It should give tle in every similar approach . Maybe the test cases are not arranged properly.

mine from +30 to -30 :( for the same.

+40 to -100

-16 to +56 because of others getting TLE on B.my solution

I can't understand people who use python for competitive programming. If you use python for competitive programming, so you won't become good in it.

Ever heard of pajengod bruh?

no

Most people do competitive programming to learn a language and to get better at data structures and algorithms. I use Python because I can, what is the meaning of "If you use python for competitive programming, so you won't become good in it"? What does a language have to do with algorithms and logic?

You can't do a simple dfs with python, then you want to get better at data structures and algorithms? Is there any LGM that his main language is python?

why i can't do dfs in python? are you serious

not everyone here is wanting to be LGM, i am here to practice for good placements.

got tle because of storing digits...

same I used set to store the digits and TLED on test case 11 but pretest were not much strong.

This Contest went Tough for me but Contests like these are real tester of our skills like patience , how good we are in making comeback after slow start ,implementation . Overall it was a great contest and we will surely gain a lot of things (keeping aside ratings ) for long run

Why Ternary search gave AC for problem D div2/B div1.

Python Lives Matter xD

Why so much conflict on DIV2 B here is my solution DIV2 B Solution

Why Div 2 B rejudge on improved time limits would be fair.

A large number of submissions times out on system test (excl. C++) which are of optimal time complexities.

Had it been a case of TLE on pre-tests, (or even close to time limit), one have the opportunity to re-implement in faster languages. (I saw 93ms and thought it'd be fine)

Languages like Python is not an odd choice for the problem, as it particularly helps iterating over digits without divide and modulo over 10s.

I totally agree with you I was a bit sceptical at first but when I saw that it passed all the pretests so efficiently I didn't think it needed any optimisation at all. Suppose I'd have got something above maybe 1 seconds I would've tried to optimise it or would've thought about my approach again. But those silly pretests kept us clueless. In such cases why to even bother giving the pretests. Just don't tell us anything and let us match the answers just from the example given in the problem T-T

Can someone tell why i am getting wrong answer in test case 3 in system testing for div2 B my code :- 101899785

I think it's better if you explain your reasoning/logic as well.

I have counted individually digits for 2,4,8 --> max of three for 6 ---> 6 for 3,9 ---> max of two for 5 or 7 ---> 5 or 7

then checked if it exits and divides the no. , if it divides then break else increment

Your code is a bit hard to follow. Try not to name variables as 'ttt','se' etc. Why do you check if each digit of 'n'(given number) is divisible by every digit?

i got my mistake accepted code — 101913424

cool

Div 2 B from OEIS again. A002796

Do you think it's any helpful to solve?