By awoo, history, 3 months ago, translation, In English

Hello Codeforces!

On Nov/24/2023 17:35 (Moscow time) Educational Codeforces Round 158 (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, Ivan BledDest Androsov, Maksim Neon Mescheryakov, Roman Roms Glazov and me. Also, huge thanks to Mike MikeMirzayanov Mirzayanov for great systems Polygon and Codeforces.

Good luck to all the participants!

UPD: Editorial is out

  • Vote: I like it
  • +180
  • Vote: I do not like it

»
3 months ago, # |
  Vote: I like it +51 Vote: I do not like it

Such a short and clear announcement I hope problems statements be like this too!

»
3 months ago, # |
  Vote: I like it +7 Vote: I do not like it

Excited for this round! Initially I didn't like edu rounds, but I've started liking them more nowadays.

»
3 months ago, # |
Rev. 2   Vote: I like it +7 Vote: I do not like it

I'm excited to this round, I hope that I'll enter pupil after it :), Good luck to everyone ^_^

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

Wow,So exciting to see this round.I hope, inshallah! I will learn something new from this contest.

»
3 months ago, # |
  Vote: I like it +6 Vote: I do not like it

Happy Fibonacci Day ;)

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

I will give my best performance in this game!

»
3 months ago, # |
  Vote: I like it +2 Vote: I do not like it

Good Luck!

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

let us Do our Best =D

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

Wish Rating ++

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

Pupil, I'm comming for you.

»
3 months ago, # |
  Vote: I like it +4 Vote: I do not like it

Education

»
3 months ago, # |
  Vote: I like it +19 Vote: I do not like it

C > B > D

»
3 months ago, # |
  Vote: I like it +5 Vote: I do not like it

SpeedForces

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

why in D, test case 1 the output 7 is incorrect?

  • »
    »
    3 months ago, # ^ |
    Rev. 2   Vote: I like it +3 Vote: I do not like it

    There are 2 equivalent worst-case lightning strikes.

    Here is the test case: 2 1 5 6 4 3

    First example:

    • 8 damage onto 6
    • 7 damage onto 5
    • 6 damage onto 1
    • 5 damage onto 2
    • 4 damage onto 4
    • 3 damage onto 3

    Notice the damage toward the end is exact so you can't do better than 8. The other worst case is:

    • 8 damage onto 6
    • 7 damage onto 4
    • 6 damage onto 3
    • 5 damage onto 5
    • 4 damage onto 1
    • 3 damage onto 2

    Again, we have exact damage at one point, so we can't do better.

    EDIT: Fixed bad formatting.

    • »
      »
      »
      3 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      what? means do cf is asking us to check only 2 ways and get the ans for Div2D?

      • »
        »
        »
        »
        3 months ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        No I was just giving examples why it can't be 7. We have to account for our worst case possibilities; it isn't how can we play optimally, since the lightning strikes are random.

    • »
      »
      »
      3 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      But what happen if 8 damage onto 2? Or it doesn't the worst case what's the worst case mean? Thankyou

      • »
        »
        »
        »
        3 months ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        "Firstly, Vasya chooses an index i of some monster (1≤i≤n) and the initial power of the spell x"

        the first monster can be chosen. If you choose the 6-hp monster, you will certainly kill all with 8 spell power.

        • »
          »
          »
          »
          »
          3 months ago, # ^ |
            Vote: I like it 0 Vote: I do not like it

          oh i get it now! thanks you. so hard to understand it for me

  • »
    »
    3 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    yeah I was also getting 7 as the output. as we can move from 6->5->4->3->1->2. Here 7 looks like optimal ans

    • »
      »
      »
      3 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      It doesn't matter if we "can move" there. We always have to take the WORST case.

  • »
    »
    3 months ago, # ^ |
    Rev. 3   Vote: I like it 0 Vote: I do not like it

    Suppose you start by hitting the 6 HP monster, and the following happens:

    • hit 6 HP monster with 7 dmg

    • hit 5 HP monster with 6 dmg

    • hit 1 HP monster with 5 dmg

    • hit 2 HP monster with 4 dmg

    • hit 4 HP monster with 3 dmg

    • hit 3 HP monster with 2 dmg

    The last monster lives.

    If you pick any monster further left as the starting point, the 3 HP monster lives in some scenario. If you pick any monster further right as the starting point, the 2 HP lives in some scenario.

  • »
    »
    3 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Because...a power of $$$7$$$ isn't enough to kill all monsters? Why do you think it is enough? Remember that you can only choose the starting monster, you can't affect the order they're killed in after that.

»
3 months ago, # |
Rev. 2   Vote: I like it +3 Vote: I do not like it

Bruh I was convinced D was supposed to be solved with monotonic stack, turns out it was much easier than that.

Also had to completely guess C, not a good time.

»
3 months ago, # |
Rev. 2   Vote: I like it 0 Vote: I do not like it

Why is my solution for B not working? subtract the minimum ovral from all elements subtract 1 from it add it to the answer, then for each island between 0s add the maximum to the answer . why is this wrong?

  • »
    »
    3 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Islands can be created while running. For example

    2 4 4 3 5

    Let's say you start by removing 1 from all :

    1 3 3 2 4

    remove min from all and add to answer

    0 2 2 1 3

    ans = 1

    Your answer would then be to add 3 to this (return ans = 4) But if you run the algorithm, after a pass you're going to end up with :

    0 1 1 0 2

    ans = 2

    Problem here is you created a new island that you didn't account for, so the answer would be 5, not 4 !

    You had to take care of the case when you start descending (4 -> 3 in original array) and then you start ascending (3 -> 5 in original array)

»
3 months ago, # |
  Vote: I like it +28 Vote: I do not like it

I thought C was harder than D lol

»
3 months ago, # |
  Vote: I like it +6 Vote: I do not like it

Where's Tutorial?

»
3 months ago, # |
  Vote: I like it +5 Vote: I do not like it

Thanks for the great round! Could someone please share solution to D?

  • »
    »
    3 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it
    • »
      »
      »
      3 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      Thanks

    • »
      »
      »
      3 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      Idea is finding damage to destroy the right part and the left part relative to some element.

  • »
    »
    3 months ago, # ^ |
      Vote: I like it +5 Vote: I do not like it

    Fix some position of $$$k$$$, then find the lowest possible damage a monster at each position could receive.

    For $$$k=1$$$, the first monster receives at least $$$x$$$ damage, the second at least $$$x-1$$$, the third at least $$$x-2$$$, and so on.

    For $$$k=2$$$, the first monster receives at least $$$x-n+1$$$ damage (when only the last lightning strike hits it), the second receives at least $$$x$$$ damage, the third receives at least $$$x-2$$$ (in the worst case, the second lightning strike hits the first monster, and the third strike hits the third monster), and so on.

    Now you'll find a pattern:

    • For $$$i<k$$$, the minimum damage dealt is $$$x - n + i$$$ (zero indexed)

    • For $$$i=k$$$, $$$x$$$ damage is dealt

    • For $$$i>k$$$, the minimum damage dealt is $$$x+1-i$$$

    So for any $$$k$$$, the minimum $$$x$$$ required is $$$\max(\max_{i<k}(a_i+n-i), a_k, \max_{i>k}(a_i - 1 + i))$$$. You can use prefix and suffix maximums to compute this for all values of $$$k$$$ and return the minimum answer.

»
3 months ago, # |
  Vote: I like it +8 Vote: I do not like it

Can someone explain me what is incident edge?

  • »
    »
    3 months ago, # ^ |
      Vote: I like it +6 Vote: I do not like it

    An edge is incident to a node if that node is one of the edge's endpoints.

    • »
      »
      »
      3 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      so the number of incident edges = the number of degrees of a node?

      • »
        »
        »
        »
        3 months ago, # ^ |
          Vote: I like it +14 Vote: I do not like it

        Yes, the number of incident edges of a node equals the degree of the node.

  • »
    »
    3 months ago, # ^ |
      Vote: I like it +6 Vote: I do not like it

    These terms should be defined in the statement imo. Also, authors can use more familiar terms, like "degree", which should also be defined

    • »
      »
      »
      3 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      It's not easy to know which terms are "well-known" and which are not, especially if you aren't a native english speaker. There will always who doesn't know some term. That's why the clarificiations -system and google exist.

      • »
        »
        »
        »
        3 months ago, # ^ |
          Vote: I like it +14 Vote: I do not like it

        I often see very common terms like tree, permutation, subarray, subsequence etc. defined. Gave me the notion that defining these terms was the standard.

        Although I don't need it, I like it better than without.

»
3 months ago, # |
  Vote: I like it +9 Vote: I do not like it

E>>>D, D and C are relatively easy compared to other edu rounds.

  • »
    »
    3 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    D maybe, but not C

    • »
      »
      »
      3 months ago, # ^ |
        Vote: I like it +6 Vote: I do not like it

      C is too difficult to guess

      • »
        »
        »
        »
        3 months ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        Yeah, kind of

      • »
        »
        »
        »
        3 months ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        messed it up, but i dont think its too bad :)

      • »
        »
        »
        »
        3 months ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        C is far easier than B imho but I guess people are good at different styles of problems.

      • »
        »
        »
        »
        3 months ago, # ^ |
          Vote: I like it +5 Vote: I do not like it

        What I think is that people below 1500 rating think too greedy that today's C will be easier for them but the people above 1600 try to think in a more generic way that's why they were not able to come up with the logic that answer will only depend on the highest and lowest element.

        We should try to balance both things I guess to perform the best.

        I also was not able to solve C but solved D in just 15 mins, sadly :(

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

how to solve B? how to solve C?

  • »
    »
    3 months ago, # ^ |
    Rev. 2   Vote: I like it +10 Vote: I do not like it

    B:

    When a teleportation happens, there is a source and destination. My approach was to count how many source teleportations are required and how many destination teleportations are required.

    For each $$$i$$$ in which $$$c_i > c_{i - 1}$$$, there must have been $$$(c_i - c_{i - 1})$$$ teleportations with destination $$$c_i$$$. Add that to the destination count.

    For each $$$i$$$ in which $$$c_i < c_{i - 1}$$$, there must have been $$$(c_{i - 1} - c_i)$$$ teleportations with source $$$c_{i - 1}$$$. Add that to the source count.

    Furthermore, add $$$c_1 - 1$$$ to the destination count, and also add $$$c_n - 1$$$ to the source count. Return the maximum between source and destination counts.

    C:

    Consider when there are two distinct values $$$a$$$ and $$$b$$$. No matter which value of $$$x$$$ you pick, the difference between $$$a$$$ and $$$b$$$ reduces to either $$$\left\lfloor\frac{b - a}{2}\right\rfloor$$$ or $$$\left\lfloor\frac{b - a}{2}\right\rfloor + 1$$$. The former is optimal and can be achieved by simply choosing either $$$a$$$ or $$$b$$$ as your $$$x$$$.

    If you have more than two distinct elements, all you need to do is ensure that the smallest and biggest values coincide, and this guarantees that all other values will coincide too. Simply find the difference between the largest and smallest elements, and then return the number of bits in the binary representation for this difference.

    • »
      »
      »
      3 months ago, # ^ |
        Vote: I like it +12 Vote: I do not like it

      For B: you don't need to consider source counts at all. It suffices to count how many times the token must be teleported to each square, which is $$$max(c_i - c_{i - 1}, 0)$$$ for the $$$i$$$-th square ($$$i > 1$$$) and $$$max(c_i - 1, 0)$$$ for $$$i = 1$$$ (since the token starts at square 1 for free).

      So the solution is basically $$$\sum_{i=1}^n \max(c_i - c_{i-1}, 0)$$$ if you define $$$c_0 = 1$$$.

      • »
        »
        »
        »
        3 months ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        I just realized that source count must always be equal to the destination count, due to the way they are calculated, so yeah, you can count either one and it should be the answer.

    • »
      »
      »
      3 months ago, # ^ |
        Vote: I like it +8 Vote: I do not like it

      why does coincidence of the smallest and the largest number ensure that all the numbers in between coincide too?

      • »
        »
        »
        »
        3 months ago, # ^ |
          Vote: I like it +1 Vote: I do not like it

        Think about the problem in binary. You are performing $$$m$$$ operations, where at each operation, you add a value $$$x_k$$$ ($$$0 ≤ k < m$$$) to all $$$a_i$$$ and then shift right, discarding the least-significant bit for each number.

        Here is one useful insight: if you have a solution of the form: add $$$x_0$$$, shift, add $$$x_1$$$, shift, ..., add $$$x_{m-1}$$$, shift; then there is an equivalent solution of the form: add $$$s$$$, shift, add $$$0$$$, shift, add $$$0$$$, shift, ...; where $$$s = x_0 + 2x_1 + 4x_2 + \dots + 2^{m-1}x_{m-1}$$$; i.e., the number of shift operations stays the same, but you add everything in the first operation.

        So a different way to formulate the problem is: pick integers $$$s$$$ and $$$n$$$ so that $$$shift(a_i + s, n) = shift(a_j + s, n)$$$ for all pairs $$$i, j$$$, and $$$n$$$ is minimal.

        Now if you have $$$a_i ≤ a_j ≤ a_k$$$, then $$$shift(a_i + s, n) = shift(a_j + s, n) = shift(a_k + s, n)$$$ iff. $$$shift(a_i + s, n) = shift(a_k + s, n)$$$, so you only need to consider the minimum and maximum values of $$$a$$$.

    • »
      »
      »
      3 months ago, # ^ |
        Vote: I like it +1 Vote: I do not like it

      For C: it's useful to realize that to minimize the difference after division you only need to consider adding either $$$0$$$ or $$$1$$$.

      Specifically, if $$$a < b$$$, then:

      • If $$$a$$$ is odd, and $$$b$$$ is even, you must add $$$1$$$.
      • If $$$a$$$ is even, and $$$b$$$ is odd, you must add $$$0$$$.
      • If $$$a$$$ and $$$b$$$ have the same parity you can add either $$$0$$$ or $$$1$$$.
    • »
      »
      »
      3 months ago, # ^ |
      Rev. 2   Vote: I like it 0 Vote: I do not like it

      Thanks LightBrand99 for the explanation. For problem B could you please guide through your thought process (ie, how you came up with the above solution)?

      my thought process - couldn't solve with this
      • »
        »
        »
        »
        3 months ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        The task B is:

        you have an array $$$a_1,a_2,\ldots,a_n$$$. One operation use choose $$$[l,r]$$$ and decrease all $$$a_i$$$ by $$$1$$$ ($$$l \le i \le r)$$$.

        This is basic problem. Answer is $$$\sum\limits_{i=1}^{n+1} \frac{|a_i - a_{i-1}|}{2}$$$, where $$$a_0 = a_{n+1} = 0$$$.

      • »
        »
        »
        »
        3 months ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        To solve this on contest you just need to notice that in this problem your operation is choosing subarray and decreasing all values in it by $$$1$$$.

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

what is the solution for C? I chose x equal to 0 until the last one decided to be 0 or 1. can you give me some idea. Thankyou

  • »
    »
    3 months ago, # ^ |
    Rev. 2   Vote: I like it 0 Vote: I do not like it

    my solution was if the max element in the array is even and the min element in the array is odd we choose 1

    else we choose 0

    we keep doing this until the array become equal

  • »
    »
    3 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    If the parity of the max element and the min element is same it doesn't matter what you choose, the difference will be halved anyways, as the difference would be even too.

    Otherwise, the difference is odd and so it is better to choose 1 if min element is odd and choose 0 if its even. You can infer the same wrt max element in this case.

  • »
    »
    3 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Just always choose min value.

»
3 months ago, # |
Rev. 5   Vote: I like it 0 Vote: I do not like it
  • In problem C :
  • Why is this solution rejected?
  • in test case ( 2 )
  • 2
  • 5 4
  • »
    »
    3 months ago, # ^ |
    Rev. 2   Vote: I like it +4 Vote: I do not like it

    Assuming that you're talking about this submission: 234119469

    Notice how you printed an extra $$$5$$$ for the first test case even though the number of operations was $$$0$$$. The contest system thought that this $$$5$$$ was your number of operations for the second case (it was the next token in the output file) and $$$5 > 2$$$ so the verdict is WA.

»
3 months ago, # |
  Vote: I like it +43 Vote: I do not like it

A. The answer is max(a[1], a[i+1]-a[i], 2*(x-a[n])), where 2*(x-a[n]) means you need to go from n-th gas station to point x and go back.

B. The operations means you need to choose some segments to add 1 to these segments, and find the minimal amount of segments. Assume a[0]=0 we have ans=sum(max(a[i]-a[i-1],0))-1 where -1 means we don't need to teleport for the first segment.

C. If you choose x[1], x[2], ..., x[k] for operations, the final value of a[i] will be floor((a[i]+x[1]+2*x[2]+4*x[3]+...+2^(k-1)*x[k])/2^k), so in order to make a[i] become equal, we need that max(a[i])-min(a[i])<2^k because x[1] can be chosen arbitrarily.

D. We use binary search for answer, and we need to check if x is a valid answer. Assume we use the spell on the i-th monster, and for j<i, the minimum possible damage it will take is x-(n-i)-(i-j)=x-n+j, which means we must have x-n+j>=a[j] <--> a[j]-j<=x-n. For j>i, the minimum possible damage is x-(i-1)-(j-i)=x-j+1, which means x-j+1>=a[j] <--> a[j]+j<=x+1. And we must have a[i]<=x. Therefore, if we pre-calculate prefix maximum of a[j]-j and suffix maximum of a[j]+j, we can check all i for 1<=i<=n if i-th monster is a valid initial target in O(n).

E. The problem means we need to build a subtree from the initial tree, and take the sum of a[u] for all deg[u]!=2. So we can let dp[k][u]=the answer if the highest node in the tree we build is u, and deg[u]=k. Note that we don't need to distinguish cases where k>=3.

  • »
    »
    3 months ago, # ^ |
      Vote: I like it +3 Vote: I do not like it

    what do you think the rating for problem E is ?

  • »
    »
    3 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    In problem E,what is the highest node in the tree?And what do we return as the answer?

  • »
    »
    3 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    In problem D, you are under-estimating the actual amount of damage monsters will take. How are you sure that would yield a correct answer?

»
3 months ago, # |
  Vote: I like it +9 Vote: I do not like it

closest integer to 1.5 is 1 or 2 ? and why

  • »
    »
    3 months ago, # ^ |
      Vote: I like it +10 Vote: I do not like it

    Are you talking about problem C? If yes, you probably missed the part where it said rounding $$$y$$$ down to the nearest integer. We're rounding down and the nearest integer below $$$1.5$$$ is $$$1$$$, not $$$2$$$.

    • »
      »
      »
      3 months ago, # ^ |
        Vote: I like it +9 Vote: I do not like it

      crying inside wasted all my time in problem c....... crying outside ...... i will become candidate master by june 2024

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

My solution for problem C (234118115) is to choose x = min and keep making max = (max + min) / 2 until max == min, not pretty sure about this but got AC.

I hit the tab SUBMIT CODE when there was 10 seconds left but it kept loading the page until the message Contest is over displayed.

Thank you guys for the contest!

  • »
    »
    3 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Did this, but was getting some TLE so added some ugly heuristics to try and make it work. I'm really bad at C++ apparently ahhhhh. Welp thanks for confirming at least that my idea was sound !

  • »
    »
    3 months ago, # ^ |
      Vote: I like it +1 Vote: I do not like it

    What is the logic behind choosing x = min? I always chose x = 0 or x = 1.

    • »
      »
      »
      3 months ago, # ^ |
      Rev. 2   Vote: I like it +6 Vote: I do not like it

      If x = min or x = max, the difference between max and min decrease by the floor of half. This is easy to observe mathematically. For other choices, it is possible for the difference to decrease by either the floor or the ceiling of half, depending on the parity of the original min, original max, and your chosen x. This requires a little more case work for a mathematical proof, but one can intuitively deduce that the difference can't possibly be reduced further than the floor of half, so it is optimal to stick with that.

  • »
    »
    3 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    I just tested with some cases by choosing min and it seems to be correct, plus there was just about only less than a minute left (and I couldn't make it in time as in my comment).

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

I think D is easier than C. It took me 1h to solve C, but D only took 15min.If I slove D first may I can have rk1000- :(

»
3 months ago, # |
  Vote: I like it +1 Vote: I do not like it

Huge gap between ABCD and EF, not to mention that ABCD are probably under 1500-ish.

»
3 months ago, # |
  Vote: I like it +16 Vote: I do not like it

 With just 3 seconds left, I got the adrenaline rush. A SuperOverKill BFS 234117586

  • »
    »
    3 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Wow, good job

  • »
    »
    3 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    WOW but it seems your code is semi-complicated while the solution is each time x = max_number + 1

    because, (x+x+1)/2 = x while (x+x+2)/2 = x+1 so what ever happened all numbers will not exceed max_number and make the min_number be equal to max_number you can check my submission 234086134

  • »
    »
    3 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Wow, good job;

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

C > D > B > A

  • »
    »
    3 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    For me, it was D > B > C > A. C came intuitively to me and I found D much harder.

»
3 months ago, # |
  Vote: I like it +3 Vote: I do not like it

Problem sets seemed really interesting to me...Hope to see more contests like this!

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

Solved C but couldn't solve B because I forgot to use long long instead of int and somehow missed that as I was staring at my screen for an hour. It hurts so much... :(

Oh well... We live and we learn! I'm new at this so there's so much for me to learn, including the absolute basics lol.

  • »
    »
    3 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    That's why I use

    #define int long long
    

    I know it's bad practice but I've made that mistake way too many times.

  • »
    »
    3 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    can you explain your answer?

    • »
      »
      »
      3 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      B: I noticed a pattern from the provided input->output examples that the result is just the sum of the difference between each element and the element before it but only if the element before it has a higher value, plus the final element — 1.

      C: Just always pick the minimum element in the array as x. Always. The number of times it takes for all elements in the array to equal each other is equal to the number of times it takes for the maximum element to get to the minimum element with the given equation.

      So, I did just that. Stored the minimum element and the maximum element, and then made a while loop that does the operation with a counter.

»
3 months ago, # |
Rev. 2   Vote: I like it 0 Vote: I do not like it

Very interesting contest but I had a connection problem so I delayed for 20 minuets and solved " D " after the contest end :(

»
3 months ago, # |
Rev. 2   Vote: I like it +1 Vote: I do not like it

Really interesting tasks and one of the most balanced round for last months. I will be glad to see next rounds from the authors!

  • »
    »
    3 months ago, # ^ |
    Rev. 2   Vote: I like it -18 Vote: I do not like it

    " very balanced round in recent months "

    Problem D: 1987

    Problem E: 255

    Its decreasing by 10. Ideally it should decrease by 2 on each step to be balanced.

    • »
      »
      »
      3 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      What are that numbers?

      • »
        »
        »
        »
        3 months ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        Solve count

        • »
          »
          »
          »
          »
          3 months ago, # ^ |
            Vote: I like it 0 Vote: I do not like it

          But D solved more than 255 people? Am I wrong?

          • »
            »
            »
            »
            »
            »
            3 months ago, # ^ |
              Vote: I like it 0 Vote: I do not like it

            Check in official standings. Those submissions were made after contest

            • »
              »
              »
              »
              »
              »
              »
              3 months ago, # ^ |
              Rev. 4   Vote: I like it 0 Vote: I do not like it

              What I was actually trying to say is that you confused D with E and C with D

    • »
      »
      »
      3 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      There should be tasks that separates div2 and new div1 participants. The last two were just for latter ones

    • »
      »
      »
      3 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it
»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

Since there is no yet editorial: how to solve F?

»
3 months ago, # |
  Vote: I like it +3 Vote: I do not like it

Thank you for problem F! It was really satisfying to solve.

»
3 months ago, # |
Rev. 3   Vote: I like it 0 Vote: I do not like it

Problem C:

234129053

can someone please explain why I am getting memory limit exceeded for this code ?

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

In problem D, can anyone explain why I'm getting WA on test 6:

submission

  • »
    »
    3 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    for test n = 7 a = {5, 5, 5, 4, 4, 4, 4} your solution return 11 but right answer is 10

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

could smbd prove greedy solution for B, pls?

  • »
    »
    3 months ago, # ^ |
    Rev. 4   Vote: I like it 0 Vote: I do not like it

    For first move, you will need a[1]-1 moves always

    you can always move to A[i] from A[i-1] if A[i]<=A[i-1] without Teleporting

    But if A[i]>A[i-1] you need to Teleport A[i]-A[i-1] times

    Ans can be

    $$$ A[1]-1+\sum_{i=2}^{n} max(A[i]-A[i-1],0)$$$
  • »
    »
    3 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    That greedy solution you are talking about? Probem B is: we have array $$$a_1,a_2,\ldots,a_n$$$. Find minimum number of following operations we have to do to make array all zeroes. Operation is take a subsegment $$$[l,r]$$$ and decrease all values by $$$1$$$.

    It's easy to proof that if we use our operation on segment $$$[l,r]$$$ and can use it on segment $$$[l', r'] (l' < l, r < r')$$$ we should use it on segment $$$[l', r']$$$.

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

messed up on C a lot

»
3 months ago, # |
  Vote: I like it -8 Vote: I do not like it

solve() { ll n ; cin >> n; ll a[n+4]; ll mx = 0; ll mn = 1e18; for(ll i = 1; i <= n ; i++){ cin >> a[i]; mx = max(a[i],mx); mn = min(a[i],mn); } ll cnt = 0; vector<ll>v; for(ll j = 1 ; j <= 35 ; j++){ if(abs(mx-mn) == 1){ if((mx>0 && mn > 0) && (mx%2 == 0) ){ v.push_back(1); //cout << "f"<<endl; cnt++; break; } if((mx > 0 && mn > 0) && (mx%2 == 1)){ v.push_back(0); cnt++; break; } //else continue; } if((mx-mn) == 0 ){ break; } mx = 0; mn = 1e18; for(ll i = 1; i <= n ; i++){ a[i] = (a[i]/(ll)2); mx = max(a[i],mx); mn = min(a[i],mn); } v.push_back(0); cnt++; } if(cnt > n){ cout << cnt <<endl; return; } else{ cout << cnt << endl; for(auto x:v){ cout << x<<" "; } cout << endl; } }

why my code is failing . Can anyone give me any case ?

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it
»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

In D, won't it be smart to always choose the monster with the highest health at the beginning? I'm unable to come up with a counter-example as to when this won't work

  • »
    »
    3 months ago, # ^ |
    Rev. 2   Vote: I like it +1 Vote: I do not like it

    What if there are multiple monsters with highest health?

    Also try this case

    7
    3 1 4 2 2 2 2
    

    If you start with 3, the minimum power is 8 If you start with 4, the minimum power is 9

    • »
      »
      »
      3 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      Thanks for the test case! It makes sense as to why we have to consider every possible index now.

  • »
    »
    3 months ago, # ^ |
    Rev. 2   Vote: I like it 0 Vote: I do not like it

    Check out this test:

    8
    1 11 1 1 12 1 1 1
    

    Here, if we choose the monster with 12 health we need x = 17, but if we choose to start from the monster with health 11 we only need x = 16.

    We can't choose the monster with 12 and have x = 16 because we kill that monster and all monster to the right and our power decreases to 12, we kill the monster to the left of it with 12 and we get to 11, we kill the left monster again and we are down to 10, this is less than what we need to kill the monster with 11 health.

    • »
      »
      »
      3 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      2 1 5 6 4 3, in this test case if i choose starting monster as 1 and power as 8 then kill all the monsters to the left the power left is 6 then go left and kill 5 ,then power becomes 5 and then move to left ,now we get stuck at monster 6 because we have only power of 5.then why is the answer 8? or am i making some mistake pls point that out?

      • »
        »
        »
        »
        3 months ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        The answer is 8 because you can choose to start at the monster 6 and for every option you take at whatever point in time you can always kill all the monsters.

        • »
          »
          »
          »
          »
          3 months ago, # ^ |
            Vote: I like it 0 Vote: I do not like it

          but we are told that the answer should work even in the worst case, so why won’t the case i mentioned be considered.

          • »
            »
            »
            »
            »
            »
            3 months ago, # ^ |
              Vote: I like it 0 Vote: I do not like it

            It should work in the worst case for the starting element that you have chosen, that's why the problem comes down to finding the starting element for which the worst case is the least of all the other worst cases.

»
3 months ago, # |
  Vote: I like it +113 Vote: I do not like it

In this round,Im_dik from Chongqing Nankai Secondary School defeated the famous Legendary Grandmaster Um_nik. It's so fun!

»
3 months ago, # |
  Vote: I like it +1 Vote: I do not like it

I am curious about the input size n (5 times of 10^5 but not usual 1 or 2) in problem E, is it intended? I kept getting MLE and RTE during the contest and, it turns out RTE is stack overflow (I should have thought it through), while I only left two local variables in the usual tree-DP recursive function. After exact those two local variables out of the recursion stack, it is an Accepted code. It seems that the stack size setting for Java in CF is a small number of MB, while I never thought it would be an issue, at least not in tree-DP. (BTW I used 128MB in local dev-environment setting.)

But thanks to this problem, now I have got a snippet of code to do tree-DP-traversal without recursion. =)

»
3 months ago, # |
Rev. 2   Vote: I like it 0 Vote: I do not like it

The system test finished and my tricky solution 234102255 for problem E is still alive. Can anyone provide a hack test or it is actually true ?

»
3 months ago, # |
  Vote: I like it +2 Vote: I do not like it

Waiting for editorial

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

In problem D, for test case 2, 1, 5, 6, 4, 3 why spell of 7 is not the minimum because if we start with index 4(value = 6) and damage = 7, then index = 3 getting damage 6, then index 5 getting damage 5, index 6 getting damage 4 and index 2 and 1 getting damage 3 and 2 respectively. Can anyone suggest where I am doing wrong?

  • »
    »
    3 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    If you start at index 4 with power 7 you than kill the index 5 with power 6 and the index 6 with power 5, now you don't have enough power left to kill the monster at index 4. Remember, since the monster killed is chosen randomly between the 2 options possible (or 1 if there are no 2 possible options), you have to account for the worst case scenario. Sure, power 7 would've worked if you killed index 3 first, then the indexes >4 and than the indexes <3, but that's only one case, we have to account for all possible cases.

    • »
      »
      »
      3 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      so basically if we choose index 'i' so there are two possiblites that either go to the right of till end and the the other half and another one like go to left of i to the start and then go for the other half ?

      • »
        »
        »
        »
        3 months ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        Those are not the only cases. For example, in an array with 5 elements (1-indexed), if you start at index 3, you can also go 3->4->2->5->1. At any moment in time, if there are 2 indexes that you've not visited adjacent to indexes that you have visited, you can go in either one of the 2, that's why it's important to account for all possible ways. But yes, in the solution, you're basically assuming the worst case scenario, that is, if the index is to the left of the starting element you're assuming it first went to the right and only then came left so that by the time it reaches that index, the power will be the minimum. The same goes for when the index is to the right of the starting index, only in reverse.

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

One of the best edu rounds.

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

I Have completed 1 problem successfully still didn’t get any rate.It's showing unrated.why so!!

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

this round is rated or unrated idk. I think this round unrated because rate not given soooo longgg

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

A simple logic for the problem c : if max_element of array is even then we add 1 to array otherwise add 0 234215511

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

I participated this contest but my rating didn't change. Why?

»
3 months ago, # |
  Vote: I like it +3 Vote: I do not like it

will the rate updated before the upcoming codeton contest

»
3 months ago, # |
  Vote: I like it +5 Vote: I do not like it

Has this contest become unrated? It is showing as unrated in ratings graph.

»
3 months ago, # |
  Vote: I like it +3 Vote: I do not like it

Update the rating!

»
3 months ago, # |
  Vote: I like it +5 Vote: I do not like it

Update the rating!

»
3 months ago, # |
  Vote: I like it +5 Vote: I do not like it

update the rating !

»
3 months ago, # |
  Vote: I like it +5 Vote: I do not like it

Please post the editorial.

»
3 months ago, # |
  Vote: I like it +2 Vote: I do not like it

Please Update the Rating !

»
3 months ago, # |
  Vote: I like it +18 Vote: I do not like it

Rating Updated! :)

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

Can anyone tell why my D is wrong my approach was to choose the index with maximum value in the beginning and then choose the smallest value which can be reached from that index and also 2 cases which start from beginning and start from end. This is my solution 234114731

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

Auto comment: topic has been updated by awoo (previous revision, new revision, compare).

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

I received a notice of violation from the Codeforces system. https://mirror.codeforces.com/contest/1901/problem/D for my solution in this problem. But I didn't do anything wrong. How appropriate is this?

»
3 months ago, # |
  Vote: I like it 0 Vote: I do not like it

i see my solution 234103633 and Zephyranthes's solution 234115043 and i don't see any the same to gain the announcement of the system