Hello Codeforces!
On Aug/04/2022 17:35 (Moscow time) Educational Codeforces Round 133 (Rated for Div. 2) will start.
Series of Educational Rounds continue being held as Harbour.Space University initiative! You can read the details about the cooperation between Harbour.Space University and Codeforces in the blog post.
This round will be rated for the participants with rating lower than 2100. It will be held on extended ICPC rules. The penalty for each incorrect submission until the submission with a full solution is 10 minutes. After the end of the contest you will have 12 hours to hack any solution you want. You will have access to copy any solution and test it locally.
You will be given 6 or 7 problems and 2 hours to solve them.
The problems were invented and prepared by Adilbek adedalic Dalabaev, Vladimir vovuh Petrov, Ivan BledDest Androsov, Maksim Neon Mescheryakov and me. Also huge thanks to Mike MikeMirzayanov Mirzayanov for great systems Polygon and Codeforces.
Good luck to all the participants!
Our friends at Harbour.Space also have a message for you:
Harbour.Space's Front-end Development programme is where programming and creativity collide. Receive up to a 50% scholarship and take advantage of this opportunity to study in Barcelona and learn from industry experts while you become one yourself.
The programme is heavily geared towards developing students’ professional skills needed for employment while being able to adapt to rapidly changing technology.
So let's meet your programme leaders:
Hjörtur is the CEO of 14islands, a design and development studio from Stockholm in Sweden and Floripa in Brazil. He co-founded the studio in 2011 and since then they've done work with companies such as Google, Adidas, Disney, Facebook, HBO, Shopify, Ericsson and many innovative startups in the world.
Marco Barbosa is the Managing Director of 14islands, a design and development studio from Stockholm in Sweden and Floripa in Brazil. Their projects have won multiple awards such as the FWA, Awwwards, CSS Design Awards, and European Design Awards.
Good luck,
Harbour.Space University Team
UPD: Editorial is out
Good luck everyone!! Hopefully everyone has fun!
cant agree more TwT
Hahahahaha!
Stop downvoting my comment, please XD
Why do you want unrated round when there are so many virtual contests already?
Why do you want unrated? The whole point of rating is to see if you are improving or not, and unrated rounds would also be not fun. If you want unrated just do virtual participation
Oh I will downvote your comment buddy.
You can do anything, just don't give up!
1 point away from expert. Hope this will seal the deal!
Edit: Sorry for jinxing it guys :(
Good luck! But don't get too focused on this, or you will become nervous and won't solve problems that well. Remember, it's just a round and you should try to enjoy it no matter what your rating now is:)
full Agree with you ⁜
You should aim for questions rated for X+200 where X is your rating to make improvement.
Do u agree with this ?
I try to aim for X + 400, I think it doesn't matter much
Same
I practice X-200.
I agree
Big Brother
I prefer segment rather than single rating. I train on problems rated from x to x+500 where x is my rating.
Start with problem rating range 800-1000 and after every solve, increase the lower bound and upper bound by 300. In this way, you can practice fast solve and hard solve both.
I am competing red coders in parallel universe.
Are u making the same kind of comments from different parallel universes ? °_0
Hope i solve ABC
You just have to believe that you can do it.
Does this change your mind
Here's a hint: prefix sum and binary search.
It's called educational for a reason
If you play with me, you will have a lot of fun
I hope to get a chance to be on the blue for this game, good luck to you guys and good luck to myself
Thanks, good luck to you too
wuwu
She should be as lovely as you are, little beauty
get off the internet you fucking disgusting pedophile
You are sick, just in the girl to girl compliments
Hope everyone has good luck.
look forward to solve ABC. Ah, it is enough to me
Fine, AB is already enough to me
Hope I will get higher rating this time,it's really terrible to get lower rating for many times……
Good luck!
I hope the editorial will be posted right after the contest this time.
Hope, I will become Expert Again today !!!
feel excited to make myself green again (mmga) hope things don't turn against me
well next time then
I'm stuck on Expert for too long. Hope I can be candidate master this round
seems like B and C difficulty difference is high
It really is.
lol fr. It was super implementation heavy so hacks are gonna be brutal :(
Bros made a div 1 contest, added 2 easy problems for A and B, and named it div 2.
The difficulty gap between B and C is too big……
Agree, but again C was harder than D... and gap between B and D isn't big.
Toughest educational round ever ?? :)
Problem C is much more difficult than normal C problems
yes
c and d >= 1900 (acc to me)
D <= 1600
D <= 1600 is a little bit of a stretch bro. No 1600 question would get under 1000 solves in a contest. D is kind of annoying to implement and optimize for a 1600. I'd expect it to be around 1700-1900 to be honest.
both are 2000 :)
Hm, ok, but on my pov D was easier.
valid point. D is annoying to optimize tho.
For the big part of contestants (including me) the only real challenge was to solve A and B as quick as possible.
Worst Edu round ever .
Yeah, if you solve just 3 problems you get in top-1000, C is very cringy, D is hard to optimise (had to use pragmas)
Thanks for speedforces, I am sure everybody likes this round! \s
I agree with u.(very very
If anyone is new to codeforces today this type of contests happens once in a while and is referred as speedforces. Don't judge by this contest and leave codeforces :(
Little clearer: Don't judge by this contest and don't leave codeforces
But every 1 in 4 contest is like this only.
The difficult gap between B and C is too big :( Perhaps this is the most difficult C in Div. 2 that I have ever participated in.
it may be not. Actually when you check the solution you won't find it so difficult :)
When I finished A & B and read C & D, I realized that the contest for me was over.
As an Expert you shouldn't say that Hhh
Оne gets the impression that this contest was made specifically for advertising. Completely unbalanced quests posted (in my opinion)
What are c and d of this contest.
Mind Blowing problems.
What's speedforces?
It's a contest where there's a large gap between two adjacent problems (In this case B and C). This leads to a bottleneck where a lot of people can't get past that one question, meaning the rankings for them are solely determined by the SPEED in which they solved the other problems.
Thanks a lot!(●'◡'●)
speedforces
SpeedforcesAB
disgusting speedforces :(
Not SPEEDFORCES, but HACKFORCES!!!
I want to predict that, the hacking will be crowded, especially for the AB participants.
but literally how do you hack A or B
like, how the heck
.
Glad to see that greys are well-acquainted with what Div. 1 is like.
Please tell me that 4th problem is not a space optimization dp problem.
I suck at iterative dp.
Yeah, I tried dp but it was too slow.
I thought it was dp, but I can't find the optimization to it.
Not entirely sure what you mean by space optimization, but I used DP with $$$n$$$ columns and 2 rows (representing many more rows, but only the previous row is needed for filling the current row), along with keeping track of when the first non-zero element of the column will be (so I don't waste time iterating over the elements before it).
This does sound like I'm saving space, so it might fall under space optimization DP (again, idk what you actually mean by it), but my main objective was to save time.
My aim is to solve this problem with recursive dp.
The thing you did is space optimization which cannot be done in recursive dp i guess.
It's not very hard (it just suck that I didn't implement this on time).
Use dynamic programming. Guys, it works,... it works.
Let's call $$$dp[i][j]$$$ the number of way to reach point $$$j$$$ if we were to do the $$$ith$$$ move, which is to say, move that is divisible by $$$(k + i)$$$. Because we could reach point $$$j$$$ if we go from point $$$j - (k + i) * 1, j - (k + i) * 2,...$$$ Therefore, the number of way we could reach point $$$j$$$ by the $$$ith$$$ move is the sum of the number of way we could reach point $$$j - (k + i) * 1, j - (k + i) * 2,...$$$ by the $$$(i-1)th$$$ move. So, we have this formula: $$$dp[i][j] = dp[i-1][j - (k + i) * 1] + dp[i-1][j - (k + i) * 2] + dp[i-1][j - (k + i) * 3] + ...$$$ The barebone are there. Time complexity: Around $$$O(n^2 * \sqrt{n})$$$.
We then need to know how big the $$$dp$$$ table is. It is obvious that $$$j$$$ ranges from $$$1$$$ to $$$n$$$, and $$$i$$$ is the biggest integer such that $$$k + (k+1) + (k+2) + ... + (k+i) <= n $$$.
If the sum was larger, it would be redundant anyway, since we would never reach n because we overshot. For example, for the testcase: "8 1", we only need to calculate $$$j$$$ from $$$1$$$ to $$$3$$$, since if $$$j = 4$$$, the lowest we can go is $$$1 + 2 + 3 + 4 = 10 > 8$$$, so going beyond $$$3$$$ would be redundant.
And there you go, just create a table of size $$$i * n$$$, and calculate everything iteratively from top-down (you can use memoization if you want, but it would be hard to optimize). Then, the number of ways to reach the $$$jth$$$ point would be the sum of the number of ways to reach the $$$jth$$$ point by the $$$1st, 2nd, 3rd, ..., ith$$$ move, which is to say, the sum of every value in the $$$jth$$$ column of the $$$dp$$$ table. Space complexity: $$$O(n * \sqrt{n})$$$.
However, the above naive solution too slow, since we are calculating the sum of dp every time.
So we want to optimize this solution. Take a look at these two number: $$$dp[i][j]$$$ and $$$dp[i][j - (k + i)]$$$.
You see, $$$dp[i][j - (k + i)] = dp[i-1][j - (k + i) * 2] + dp[i-1][j - (k + i) * 3] + ...$$$
And: $$$dp[i][j] = dp[i-1][j - (k + i) * 1] + dp[i-1][j - (k + i) * 2] + dp[i-1][j - (k + i) * 3] + ...$$$
$$$= dp[i-1][j - (k + i) * 1] + (dp[i-1][j - (k + i) * 2] + dp[i-1][j - (k + i) * 3] + ...)$$$
$$$= dp[i][j - (k + i)] + dp[i-1][j - (k + i)]$$$
And vola! We have drastically reduced the complexity down to $$$O(n * \sqrt{n})$$$, which would run comfortably with the stated constraint (Edit: It wouldn't)
The solution seems pretty reasonable now, however, if you were to submit it, you would get "Memory Limit Exceeded", since the space complexity is $$$O(n * \sqrt{n})$$$, therefore, we want to optimize space on this dp table. Let's take a look at our dp formula: You see, we only need the value of the row right before us, and the value of the current row. Therefore, we don't even need to create the entire dp table! We only need to use two array to calculate each other.
Edit: When the test cases got updated, I got TLE, then I resubmitted the code, then got AC. I guess because the constraint was so tight that it just comes down to being lucky :<< (My solution ran in 1949ms, very close to the constraint of 2000ms).
Code (failed): 167051557. Code (passed): 167085973
Stop learning useless algorithms, go and solve some problems, learn how to use Black_Fate.
agreed
"We have drastically reduced the complexity down to O(n∗n−−√), which would run comfortably with the stated constraint"
Your submission also got TLE! But really good mini editorial other than that
It's kinda random. I resubmitted the code and it got Accepted. The run time was like 1949ms, very close, so I must admit, not very comfortable lol (I don't really know why, $$$O(n * \sqrt{n})$$$ complexity usually run in 300ms, so seeing my solution getting up to 1900ms is kinda strange).
Btw I got green yay.
Code: 167085973
i hate edu rounds always the same fucking story.
bro im so agree with you
No contest is "too difficult" everyone is in the same conditions than you, so if you are better than then, no matter how difficult the contest is you are gonna raise your rating
Being a Candidate Master it becomes easy say it.....but if you see C and D were 2000 many pupils , Specilaists , experts suffer from this type of contest as they were too difficult for people on these ratings.
If some other people can do it,why don't you? The Edu rounds will be always the same,if you improve your knowledge you are gonna say i like Edu Rounds haha. A bad contest is that one too easy or that one with classical problems or an unrated one, but Edu's are Ok
How to solve $$$C$$$?
There is only a fairly simple pattern of movement possible, because each cell must not be entered more than once.
This is, we go right covering both rows until some col, then got right in the current row to the end, then left back to the col in the other row.
All of this can be precalculated with prefix sums, and min/max operations.
Of course all of this is very off-by-one error prone. And actually, I am still not sure about the meaning of:
"The robot can only move into a cell (i,j) if at least ai,j seconds have passed before the move."
If a[i][j]==x, can we enter at x, or at x+1?
why the ans of this is 5 3 0 5 0 0 0 0
And the ans of this is 17? dose it means robot can only go to another position until 11 seconds past? 4 0 10 10 10 10 10 10 10
The robot enters cell[0][0] at time 0, and each other cell earliest at a[i][j]+1.
How to do D?
First I wrote a $$$O(\sqrt{n} \cdot n \cdot \log n)$$$ DP, thinking it may pass, but it's TLE. Then I realized there is an optimization to get rid of the $$$\log n$$$ part.
I made the same mistake at first :) "Naive" dp is actually $$$O(n^2 \log n)$$$.
same, but i fucked up in prefix sums speed-up probably due to pressure
I also wrote the same DP and hope it passes :(
We can calculate $$$dp[i][j]$$$ — number of way to get $$$j$$$ in $$$i$$$ moves. Then for $$$x = 1$$$ $$$dp[1][j] = 1, dp[2][j] = dp[1][j - 2] + dp[1][j - 4] + dp[1][j - 6] + \dots, dp[i][j] = dp[i - 1][j - i] + dp[i - 1][j - 2i] + \dots, dp[i][j] = dp[i - 1][j - i] + dp[i][j - i]$$$ (try to understand, why last correct). This is a quadratic dp. But look: if we done $$$i$$$ move, our answer is at least $$$1 + 2 + \dots + i = O(i^2)$$$. This means, that the first dimension of array is $$$O(\sqrt{n})$$$. I brough 800. Also, if you try to declare the whole array, you will get $$$MLE$$$. Instead, declare only two rows, calculate next, and delete previous.
Igor_Parfenov,can you please tell the 2nd term of DP recurrence written below i.e dp[i][j-i] :
dp[i][j] = dp[i-1][j-i] + dp[i][j-i]; I somehow got the idea from steveonalex comment above but can you please tell me the intuition of the 2nd term it just isn't hitting me after so much attempts. In contest how we will get the 2nd term so fast , I have seen many submissions and they have written the term so easily but the biggest challenge for me is to get the 2nd term in above recurrence relation. Can you please tell the intuition.
$$$dp[i][j] = dp[i - 1][j - i] + dp[i - 1][j - 2i] + dp[i - 1][j - 3i] + \dots$$$
$$$dp[i][j - i] = dp[i - 1][j - i - i] + dp[i - 1][j - i - 2i] + dp[i - 1][j - i - 3i] + \dots$$$
The second sum is the same in first, except it doesn't contain $$$dp[i - 1][j - i]$$$. I don't know, how to explain, how to get to it during contest. I drawed a picture of array, looked, sum of which cells form the given cell, and just noticed it.
I got you bro! Image. How did I found the formula? Well, I just derive the inefficient formula, then take a second look at the formula, then found out that you don't even have to calculate dp[i−1][j−2i] + dp[i−1][j−3i] + ..., since that is dp[i][j — i]. I guess if you are good enough at math, or if you have done way too much dp problem, you could spot that easily.
I used DP, where $$$dp[i][j]$$$ represents the number of ways to reach $$$j$$$ while using at least one $$$(k + i)$$$ step, but no larger steps. Then $$$dp[i][j] = dp[i][j - (k + i)] + dp[i - 1][j - (k + i)]$$$.
To save space, I only maintained two rows, since each row only depends on the previous row. To save time, I also kept track of what the first non-zero element of each column will be, so I don't iterate over the elements on the left (which I know are 0).
Use dp.
It is easy to see the steps must be not big,about $$$\sqrt{n}$$$.
Set $$$f_{i,j}$$$ as the answer of $$$i$$$ steps reach $$$j$$$.
$$$f_{i,j}=\sum_{l=1}^{j-1} f_l*[(j-l) \mod (k+i-1) == 0]$$$
Then we can use rolling arrays to optimize the memory and use prefix sum to optimize the time.
Then it is a $$$O(n\sqrt{n})$$$ solution.
Code: 166958668
What I did in the contest:
read A
A done
read B
B done
read C
read D
read E
welcome to osu!
Click the circle!
Same, except that I slept instead of playing Osu
speedforces
With respect, will you please explain what does 'speedforces' mean? I see this term a lot. But I don't know what it means.
This comment explains it.
This is why i hate speedforce i got a wrong submission on A than due to this i complete A and B in 24 minutes due to this currently my rank is over 7K.
D was stars and bars ? ??
I solved it using dp. DPij means the number of sets such that the last number is i and the last permormed operation was with k' = k + j. Then ans[i] is the sum of DPij over all j. But if you do this naively the solution will run in O(n^2). Think how to optimize this dp to run in O(n * sqrt(n)).
You know the contest is trash when you even tried to attempt F during the round
How to solve C and D?
This educational contest seems too spartan for me...
i think awoo , adedalic ,BledDest are out of ideas. They should probably rest and give problem setting and testing to some other guys.
That's what I was thinkiiinng! Great to finally find some support <3
Speedforces :)
For question C, aren't there only 3 possible paths? One is clockwise, one is counterclockwise, one is zigzag. I tried all three paths but it didn't work? Please help
Zig-zag too consists of some other paths like when you choose to complete all columns of a row first!
It can be zigzag, then a big turn.
You can do a little bit of zigzag at the beginning and then clockwise or counterclockwise
There's more than 3. You have a prefix of zigzag moves, and then remaining clockwise or counterclockwise. The choice is where you stop zigzagging.
you should check all possible ways like that:
start and go clockwise
X---|
<--|
down and counterclockwise
X<--|
X --|
again up and clockwise
XX -|
XX<-|
and so on
I also thought that. But the number of solves is to little for it to be that easy.
During the zigzag, you can start a clockwise or counterclockwise path at any point.
To be completely honest, I don't possibly see how they would think this is a Div2C. In my opinion, it would at least be a Div2D, or even a E for an educational round.
wow
Great fortune indeed
great_fortune
The moments why we cpers like cp....
Any pointers for D?
My potato brain can only think of the most naive solution
Hello Potato Sir. You already left Cp . I hope one day you will see this and reply me.
F is a VERY VERY VERY standard stirling problem and has occurred in codeforces before. And I don't know the point in the strict time limit that $$$O(Tklog(998244353))$$$ can't pass. And as a master, I don't know how to solve C. C is too difficult.
So it's called speedforces because for most of the contestants the ratings depend on how fast they solve the first few questions, right?
First time taking part in such an unusual round. I failed to solve D but I find it very interesting, though.
I think E is much harder than F.
If they made D have lower constraints and then swap C and D, the contest could have been more balanced. The idea for D wasn't too difficult but everyone was getting TLE because it was so hard to optimize past O(N^2).
I think that would be a good contest if authors had split problems C and D into 2 parts with better restrictions. Optimizing C and D by time + memory to get AC for 2 hours is not fun (and I still was not able to get AC on either of them).
[Deleted]
Not true, your path consists of a prefix of zigzags, followed by a suffix of the 2 straight lines. So there are more than 3 possible paths.
Yeah, just realised
The robot can zigzag for a few columns and then go clockwise/anticlockwise.
Why couldn't the Memory Limit for D be 512 mb?
Seemed like a deliberate attempt to force the participants to ONLY come up with some specific obscure logic.
I did have some thoughts on C. I think we should go zigzag column by column on a prefix then do a round trip on suffix. But i don't know how to calculate the time needed for the suffix efficiently.
Can someone find a counter test for this WA 5 solution for E? Thanks. 167008625
I clam that the order in which swaps are performed doesn't matter, so I calculate the solution for all the combinations of first 10 bits, then I bruteforce update the remaining ones. Is this ok approach?
Take a look at Ticket 15984 from CF Stress for a counter example.
D was absolute best!. Couldn't solve it but enjoyed thinking about it. Same for C.
Any one though of solving C using DFS where every time we choose the minimum neighbor and add the just visited neighbor + 1 to the answer ?
Anytime you decide to pick the neighbour on the right, you'll have to traverse the grid either clockwise or counter-clockwise in order to visit all indexes in the grid. Seems like more of a DP problem.
can someone tell me why n * sqrt(n) in D doesn't pass? I made linear memory solution (or almost..) but it TLEs.. how...
It should pass, but with proper realisation
It has to pass, but yes, the limits are very strict.
Also, it seems, that the whole array is bigger, than memory limit. I instead used only two rows.
at least i came up with the idea, though it isn't too hard...
probably because of the log factor of the
std::map
.i tried everything: unordered_map with custom hash function, simple vector (but it caused MLE)...
I'm in the same situation as you.The time limit is too tight. 167005425
I had major connection problems during the contest, which only affected codeforces.
Am I the only one in this case ?
Hardforces
in C
a[0][0] = -1
removes all chaos in mindMy opinions on the problemset:
A: Involved a bit of thinking, but alright
B: Easier than A imo
C: Very annoying for C, but if you see the zigzag pattern and a bit of suffix maximums (clockwise, counterclockwise), it's doable
D: Easier than C. $$$O(N\sqrt{N})$$$ DP knowing that the maximum number of steps is bounded to $$$O(\sqrt{N})$$$ from $$$1+2+3+...+k = \frac{k(k+1)}{2}$$$
E: I like this problem. A bit of thinking made me realize it is similar to a segment tree and in each node we store $$$2^i$$$ values for each bitmask when the height of the node is i. Solid.
F: Didn't solve it, but I came up with a $$$O(k^2)$$$ using the fact that the sum of $$$F^k$$$ is equivalent to the number of $$$k$$$-tuples. I will try to upsolve it soon.
EDIT: I upsolved F. I solved it using stirling number of the second kind + counting ordered k-tuples. My solution runs in $$$O(Tk + MAXK^2)$$$, where the $$$MAXK^2$$$ is from pre-calculating the stirling numbers.
how did you exactly solve D in O(n * sqrt(n))? I did also notice that maximum number of steps is 632, which is close to sqrt(n), but my solution tles, though i've optimized it a lot
Tight time limits. I got TLE for three times.
Oh I think for each step, you should disregard the $$$dp_i$$$ values for $$$i$$$ values that are below the possible minimum value that can be achieved.
For A you wrote it like it shouldn't contain any thinking.
Sorry if I sounded like that, what I meant was I was kinda surprised how B felt easier than A
I think it shouldn't.
if you liked E:
1671E - Preorder
1654F - Minimal String Xoration
Also consider 1553H - XOR and Distance.
Hi haters, hi bots
Hey, I really liked your implementation on E!
How to solve F? What is the relationship between this problem and Stirling number?
Sum of F^k is essentially the number of occurrences of all possible ordered k-tuples of indices that have an odd-numbered ball (Errichto had a blog about this Link.
So, this can be calculated by iterating over the number of distinct indices that show up in the k-tuples. We can think of the number of k-tuples with $$$j$$$ distinct indices as an ordered integer partition of 1..k (think of putting 1 to k in $$$j$$$ boxes labelled with the indices), so for a set of $$$j$$$ distinct indices, we have $$$S(k, j)*j!$$$ ways of doing it.
Note that this does not address the rest of the problem, so now we have to consider the number of ways of selecting j indices from 1..n, and filling those $$$j$$$ balls with odd integers, and the rest $$$(m-j)$$$ with even integers. The formula we get is similar to binomial theorem:
$$$\sum_{j=1}^{k} S(k,j)j! (\sum_{i=0}^{n}{n \choose i}{i \choose j}x^{i}(m-x)^{n-i})$$$ which can be rewritten as
$$$\sum_{j=1}^{k} S(k,j) (\sum_{i=0}^{n}i(i-1)...(i-(j-1)){n \choose i}x^i(m-x)^{n-i})$$$
We can differentiate a few times to derive the equations for the second summand (ex. $$$\sum_{i=0}^{n} i {n \choose i} x^{i}(m-x)^{n-i} = nm^{n-1}x$$$, where $$$x$$$ is the number of odd integers between $$$[1, m]$$$) This should give a nice clean $$$O(k)$$$ solution per testcase. (Don't do modulo division $$$k$$$ times as that would exceed TL)
My worst performance in an edu round :/
Same, ig
C and D were too good for me. I cant solve too good questions.
the contest was of only 10 minutes for me :( , when I saw question C I closed tab
I Solve D in 20min, but could not solve C for the whole contest.
I think they should swap C and D, D is a too standard dp problem...
I knew how to solve C two minutes after reading it, but did not find any idea how to solve D in less than O(n^2)
uh, maybe you just forgot that you solution is not $$$O(n^2)$$$ but $$$O(n\sqrt{n})$$$
let $$$dp(i,j)$$$ be the ways from $$$1$$$ to $$$i$$$ by using $$$j$$$ steps, you could find that $$$\sum\limits_{x = 1}^{k}x = \dfrac{k(k+1)}{2} \le n$$$, that means $$$k\le\sqrt{n}$$$, $$$k \not = n$$$, so your solution might be $$$O(nk) = O(n \sqrt{n})$$$.
Initially, I was thinking about how to optimize my solution to $$$O(n \log n)$$$, but when I realize this fact, I started to write the $$$O(n\sqrt{n})$$$ solution.
p.s. you can find that all $$$dp(...,j)$$$ are rely on $$$dp(...,j - 1)$$$, so you can use scrolling array to optimize the memory :)
p.p.s : this is my simple implementation.
C is too hard for div. 2
Me After Solving A & B :')
D is a great problem, I enjoyed it!
Happily I started solving it early enough
Although I wasted an attempt thinking 305*305 > 2*2e5... silly me
How to solve D?
My solution:
let's say that every time we add something, K increases by 1 and we have to add a number divisible by K next turn.
at first notice that K can increase up to 2*(square root of N), since if it becomes a bigger number than this, the sum of added numbers to the coordinate will be >= 1 + 2 + ... + 2*(sqrt(n)) , which is bigger than N.
So, for each number i from 1 to N and for all k <= x <= 2*sqrt(n) we can check if we can reach i when K will become x:
for that for each k <= x <= k+ 2*sqrt(N) and for each 1 <= i <= n we will check how many sums of numbers from k to x can be equal i, this can be done by dp, let dp[i][x-k] be just that.
Answer for each 1 <=i <=n is a sum of all dp[i][x-k] (k <= x <= k+ 2*sqrt(N) (mod 998244353).
It take multiple contest to regain rating and reach to certain point but just one ugly contests like this are enough to discard all your hardwork and progress . Super disappointed . Problem C sucks .
Problems were really good but the round was extremely unbalanced
E seems like segment tree application,but how to get maximum sum of the subarray By segment tree?
Store the prefix maximum, suffix maximum, total sum, and the maximum within the subarray for each node. Though you need to store more nodes than a normal segment tree
That was what I thought,but I get stuck in tree update process, if k is zero, it means that at least half of the nodes of the tree need further update, and I thought it cost too much time
time limit for D should be higher
XD same!
Anyone solved D with Python? I figured it out quickly but it seems O(N√N) is too much for Python. Good problem though.
I didn't use Python, but I got 296ms with C++ (the limit is 2 seconds), so I very much doubt there is any language disadvantage.
However, from what I gathered from other comments, filling up every element of every row in the DP would exceed the time limit (even in C++). Instead, you should keep track of what is the first non-zero column of each row (sum of each type of step so far), and don't waste time iterating over these known 0 values on the left.
Also, it seems your verdict was actually memory limit exceeded. You only need to maintain two rows of DP, since each row depends only on the previous row (and the earlier elements of its own row).
Thanks for your reply. I tried DP but it cost 40 seconds on case 200000 1 on my computer. Eventually, I found that it can pass the case using Pypy64 on CF.
I rewrote your code in a way that is working: here.
I don't know how I could write this in a pythonic way though.
Fool me once shame on you, lied to me two times I'm stupid
Why so many bad comments? I didn't have time to look at E and F at all, but problems A ~ D all had their own merits. It was a good Edu round as always.
This tends to be the result of unbalanced problem sets rather than bad problems per se.
In this case, if you were below the level required for problem C and/or D (an overwhelming majority of participants), then all that differentiates you is the combined time for A and B, which are trivial questions. Therefore the rankings from around 1500 below are more arbitrary than they should be, and people are upset that this adversely affects their ratings.
I understand it perfectly well, although I'm quite sure that no problem setter ever sets out with the intention of upsetting people or to create an unbalanced problem set and it's also important to remember that.
The problems themselves were good individually, but I would really appreciate a problem between B and C. This C is probably like 1900 (judging by the number of solves during the contest), so we have like 700 gap between B and C.
It was more like 2100 honestly. 1900 problems usually get 1500-2000 solves in a contest, not 1000
The difficulty of the problems of this round was very unbalanced in my opinion. C and D is significantly harder than A and B :(( I can only complete problem A, B, and nearly done problem D (I'd be able to solve it if the contest was 5 minutes longer) :<<
Problem setters in a nutshell:
I should skip edu rounds. :(
with each educational round, I want to get out of codeforces and no longer comes lol)
in contest : oh i took so much time solving A & B , but its okay i have enough time to solve c
problem c :
how does the formula (n+2)/3 comes in problem A
Try finding answers for n:(1 to 10) using pen and copy. You will get it.
That's wrong for n = 1, right?
The only corner case
Yes. Usually for $$$n=1$$$ you will need to write something like:
If we treat n is 1 as an exception (requires 2 moves for obvious reasons), then we can achieve any other number in
ceil(n/3)
operations*.ceil(n/3) = (n + 2)/3
.*Proof: it is trivial that
ceil(n/3)
is a lower bound, since we can move at most 3 steps each time. Therefore it suffices to show that it is attainable. If n is a multiple of 3, then move entirely in blocks of 3. Otherwise, move in blocks of 3 except for one 2-move ifn % 3 = 2
or two 2-moves ifn % 3 = 1
.For any number $$$n$$$ and any nonzero number $$$k$$$ this is true: $$$ceil(n÷k)=(n+k-1)÷k$$$.
Actually you don't need this observation to solve this problem. Intuitively, it seems that for n <= 10, operations will be some strange. But for n > 10, we should extract 3 only until it is less than 10 then add the answer for remaining number. See my submission for more details: https://mirror.codeforces.com/contest/1716/submission/166940767
The only 'strange' value is n = 1. Everything else conforms. You may not realise it but you're actually applying the same logic as everyone else for n > 10, and you've unnecessarily hand-solved for n <= 10. Obviously your method is perfectly valid, but it does nonetheless rely on the same critical observation of using 'mostly' 3-moves.
using a number-theoretic approach, you could have used the fact that you can indeed construct any number $$$2$$$ and above with sums of $$$2$$$-s and $$$3$$$-s. (This is also provable by induction if any of you might wonder)
Interesting, I came up with x/3 if x mod 3 is 0, x / 3 + 1 otherwise.
Educational Codeforces Round 133:last 13 minutes for me.:(
in problem D, TLE on test 6, Submission link: https://mirror.codeforces.com/contest/1716/submission/167016276
since siz variable is <= 2*sqrt(n), size of freq would be O(N). Also for each i from 1 to N, i am iterating through 1 to siz. The time complexity would be O(N*sqrt(N)). Where am I wrong?
Could just be strict time limits. siz can go up to 900 when n=200000, when only 650 is needed. Your loop also has a lot of modulo operations, which are known to slow runtime by several factors at times.
Even after changing it to 650, I am getting TLE. What changes should I make to get AC? submission link: https://mirror.codeforces.com/contest/1716/submission/167019605
Your code is barely over 2s with C++20, I think with some optimizations it could probably pass. But the intended approach I believe is quite different from yours, which is able to skip a lot of states and doesn't need modulo. See the top scorer submissions for examples.
You can run case"200000 1" locally.If it spends 3-8s,that's the reason if tight time limit. I'm in the same situation as you.167005425
where can i find the link for editorials today's C was very hard i was not able to solve it can any one tell me the approach?
Only thing common between problem C and my crush is that they are both out of my league :)
And also I never get over them
After some more thinking about C I am somewhat disappointed.
Obviously this is an implementation problem with a lot of difficulties/traps for off-by-one errors, like every time we need to create several prefix sum/max arrays.
But here the definition "The robot can only move into a cell (i,j) if at least a[i][j] seconds have passed before the move." adds another level of trap, since that can be understood wrong. Now, an hour after the contest I am sure that we can enter cell[i][j] at a[i][j]+1 earliest, not at a[i][j].
Such inaccuracy in the text on an off-by-one problem is annoying.
12k people looking at C & D be like: Its time for me to die
What math knowledge was needed for F? It seemed pretty interesting.
Stirling number and its combinatoric meaning.
a little differentiation with binomial will do the trick too
The time limit is too tight! My O(n*sqrt(n)) method spends 6s locally in case"200000 1" and it gets TLE. 166994559 The implementation is a bit more complex than std but still O(n*sqrt(n)). Is anyone in the same situation as me?
167005425
I got AC from an O(n*sqrt(n)) solution if you're interested
166988623 (AC)
166980959 (literally the exact same thing but TLE because mod operation is apparently a lot more costly than an if statement)
The contest got over for me in 8 minutes :")
You can now get the smallest counter example for your failing submissions on cfstress.com. Contest ID: 1716
Disclaimer: Content is behind a paywall. However, if you can't purchase a subscription, you can reply to my comment ( only till the next 24 hours ) with the problem index and link to your submission, and I'll share the failing test case.
Please made cfstress free I can't afford it .
Honestly just go watch Errichto's video on stress-testing and you don't have to pay for anything.
Who else also knew what to do for C, but either:
Didnt feel like impl, so went to D
Tried impl but realised it was impl heavy then went to D <- Me
Rage quit <- Also me
(
I made a video Solutions for A-D in case people are interested.
I like problem E. My approach comes from 1654F, which is also a nice problem.
https://mirror.codeforces.com/contest/1706/problem/C
I found today's problem C like this problem. For some states we have two options, get one option in o(1) with pre-calculation and take the minimum of two options.
In problem C, how are present states of the clockwise and anti-clockwise traversals stored and updated as one incrementally moves along the zig-zag path?
I was able to get this far during the round, but still don't know how to implement it.
tfw you solved D but not C
My O(n * sqrt(n)) dp solution for D got TLE during the contest, but the same code without any modification passes when I change the compiler from GNU C++17 to GNU C++20.
After some more submissions and testing, I've found out that GNU C++17 can run 2~3 times slower than GNU C++20. Is this something normal?
It's not because of the C++ version. It's because you were using 32-bit C++17, and 64-bit C++20.
It runs fine if you use 64-bit C++17: 167026428
See: C++ 64-bit running almost 3s faster!
Thanks! I shouldve care more about those things..
Yeah I was so shocked. I submitted SRSS_'s solution and it got TLE, but then I changed the compiler to the new version and it passed.
hi Everyone . Newbie question . Where can i find the editorial for this round
It is not released yet. It is usually released after the hacking phase is over. However, you can find different videos on Youtube that discuss the solutions. Here is one: https://www.youtube.com/watch?v=ppqurybgZrQ
I guess my submission for D is too slow just because of C#? I tried to optimised it as much as i can, should be $$$O(n\sqrt{n})$$$.
F is the same as 1278F.
Difficulty: C >> D > F
Everyone who knows Stirling number can work out F. It's almost the same as 932E/1278F.
But I'm stuck in C and haven't had a glimpse at F. Cheers! :(
C itself is excellent, but its position...
Me(Before the contest):Fine,let me try my best to become CM.Just 21 rating left.
C:Thinking what?
UPD:Finally I got +1 rating ! Yeah ! (But still 20 rating left . QAQ )
Thanks to I_love_seele_forever for his 100+ successful hacking . ┏(≧▽≦)┛
( And sorry to these 100+ bro , too . )
so strong. sro sro sro XING_ginkiha orz orz orz. Only 1120 to LGM, good luck!!
D be like
Educational Contest isn't so difficult until I participate in this contest :)
Please do all us a favor in the next one <3
Why so many downvotes? The problems themselves aren't bad, are they?
Yeah.But their positions are.
Educational Codeforces Round 133 (Rated for Div. 1)
Can you please provide sample explanations for all problems next time? The statements, especially C and F, are easy to misread.
quite agree.
Yeah, they are good problems but i'm retired.
problem C is easy to think but not easy to write(maybe tedious), so i think it's the reason that this blogpost get so many downvotes.(There is almost no difference between participants at different levels, so downvotes are justified)
problem E is a bit difficult but i can solve it myself(i'm retired) i think my solution to E is unique.(maybe i gave a NAIVE solution?) share to everyone:https://mirror.codeforces.com/contest/1716/submission/167000638
i hope you can learn some methods in this code(i think it's interesting)
Can anyone tell me what's wrong here?
when I submitted the same code on GNU C++17, it showed a runtime error but was accepted when submitted on GNU C++20 during the contest.
runtime error: 166964477
accepted: 166971156
idk why did it get accepted, but i can easily explain why it RTEd — on the nth iteration of your cycle you swap v[n — 1] and v[n], which is out of bounds, you should have do smtg like swap(v[i], v[(i + 1) % n])
I failed to solve D because I didn't clear the scroll array 167007748 . This means I will drop nearly 100rating but I believe I can get it back in the next DIV2 game.
Is it possible to solve D with generating function?
Yes you can by changing times into plus and exp and ln. But you don't need to solve it in such a difficult way.
Is that use a generating function for every step?
Yes, you need to multiple them together. Then you find it easier to tranform f(x)s into ln(f(x))s and add them together.
Who know when rating change
I managed to find a solution for C but I was thinking if there was a DP solution. I couldn't find anything about it because I couldn't find a clear base case so did anyone find a DP solution even if it doesn't work on the problem constraints? Thanks in advance
Start system testing
When rating will be updated ?
so where is my rating???
Please wait for a moment :)
My code for problem D had the correct time complexity, but in the final system test, it exceeded the time limit. But submitting the same code again gets an Accept result. I didn't even realize when I was racing that my code was running out of time. That's too bad! Can the system re-evaluate my code?
And my submission number is 166977295.
I think it's important to give code that runs out of time in the final system test. In many cases, due to the fluctuation of the evaluation speed, the code with correct time complexity cannot get the accept result.
What a pity!
Hi MikeMirzayanov BledDest awoo, My submission 166991524 for problem D got TLE during the final system test while the exact same code submission 167084670 passes after the system test. Please do the needful . Thank YOu
I have a friend who had the same problem. It's really a pity that you can't get the result of Accept because of this!
I also faced the same problem, the Same submission is passed later on.
I explicitly checked that in the pretests
20000 1
passed and now while sys testing it failed.I'm in the same boat. Submission 167002114 was my final contest submission. It was marked "Accepted" by the time the contest ended and was still marked "Accepted" by the time the hacking phase finished. However, now it is now TLE.
I submitted the exact same code in Submission 167128290 after the contest and I got AC.
My code for problem D got TLE in the system test(166974979),but I submitted the same code after system testing,it ACed(167087492).Can someone retest my code?Thanks!
Hi! I have same problem as a lot of users. My code on D got TL on system tests (https://mirror.codeforces.com/contest/1716/submission/167004235), but then I tried to send it again (with adding enters in code ^_^, since codeforces do not able you to send the same code twice) and on all submitions i got AC ( https://mirror.codeforces.com/contest/1716/submission/167088073 , https://mirror.codeforces.com/contest/1716/submission/167088034 , https://mirror.codeforces.com/contest/1716/submission/167087989 , https://mirror.codeforces.com/contest/1716/submission/167087971 , https://mirror.codeforces.com/contest/1716/submission/167087910 , https://mirror.codeforces.com/contest/1716/submission/167087871 and all other submitions see in my profile). I think that's really unfair.
Even my submission https://mirror.codeforces.com/contest/1716/submission/166992307
After looking at your code template, I have to go to bathroom
Agree,and solid evidence
Very fair to get -150 because something went wrong with testing system, thank you.
Why rating change late?????????????
Still waiting for rating change.
166947093 this submission get accepted during test but shows runtime error in system testing at test 2. 167102391 submitted the same solution which is accepted. Now showing heavy minus in rating.
Still wating for become master...
Same here.
Hi! I am a big follower of yours. You are doing an amazing job bruh :) Btw feel free to check out my Chrome Extension — CP Calendar so that you don't miss any contest!
Chrome Webstore Link
It would be great if you could promote the same in any of your videos. Cheers!
Happy master !
Yellow suits you..
加油
Some codes which got Accepted for problem D in contest are getting TLE now on test 6? Why?
Hello I am cool-dude. I have just received a warning mail about rules violation stating that my solutions for problems 1716A and 1716B match with those of joebor. I deny using any unethical means of submission during the contest and also having any source of contact with joebor hence I hereby demand that any accusation against me be revoked. I suspect that as I have been using a public IDE my program was susceptible to being copied by other users of the ide. It is also evident that I have made my submissions prior to joebor. Kindly consider my request and my contest rank for evaluation.
video Editorial for Chinese
Auto comment: topic has been updated by awoo (previous revision, new revision, compare).
Codeforces Language Picker -- chrome extension to fix codeforces language picker.
Help in problem c