Блог пользователя azberjibiou

Автор azberjibiou, история, 22 месяца назад, По-английски

Hello Codeforces and welcome back to another div2 round.

YeongTree and I are excited to invite everyone to participate in Codeforces Round 851 (Div. 2), which will be held on 09.02.2023 17:35 (Московское время).

This round is rated for the participants with ratings strictly lower than 2100. You will be given 6 problems and 2 hours to solve them. All the problems are authored and prepared by YeongTree and me.

We would like to thank

The score distributions will be updated later.

UPD1: Score distribution: $$$500−1000-1500-2250−2500-3000$$$

UPD2: Congratulations to the winners!

Overall:

  1. jiangly
  2. MakaPakka
  3. MahiruShiina
  4. maspy
  5. tute7627

Rated participants

  1. MakaPakka
  2. _10circle_
  3. JJcjn
  4. 1cm
  5. YouPervertSucker

AC submissions at the last second

UPD3: Editorial is out

  • Проголосовать: нравится
  • +491
  • Проголосовать: не нравится

»
22 месяца назад, # |
  Проголосовать: нравится +10 Проголосовать: не нравится

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

»
22 месяца назад, # |
  Проголосовать: нравится +13 Проголосовать: не нравится

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

»
22 месяца назад, # |
  Проголосовать: нравится -39 Проголосовать: не нравится

as a tester, qwexd ORZZZZ

»
22 месяца назад, # |
  Проголосовать: нравится +31 Проголосовать: не нравится

As a tester, the problems were really good.

Participants, please enjoy the contest!

»
22 месяца назад, # |
  Проголосовать: нравится +45 Проголосовать: не нравится

As a tester, I enjoyed the round and the statements were brief and clear. I hope to see you on the scoreboard!

»
22 месяца назад, # |
  Проголосовать: нравится -30 Проголосовать: не нравится

As a tester, this was the best contest I have ever seen.

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится -31 Проголосовать: не нравится

    as a tester, this was the best contest I have ever seen.

    • »
      »
      »
      22 месяца назад, # ^ |
        Проголосовать: нравится +5 Проголосовать: не нравится

      As a participant , hoping this would be the best contest of [Contests I have ever seen + this contest]

»
22 месяца назад, # |
  Проголосовать: нравится +34 Проголосовать: не нравится

As an apparent tester (I don't remember testing this round recently), I'm sure the problems are good :P

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Good luck to everyone!!!

»
22 месяца назад, # |
  Проголосовать: нравится +7 Проголосовать: не нравится

Good Luck for every Candidate Master to promote to Master!

»
22 месяца назад, # |
  Проголосовать: нравится +35 Проголосовать: не нравится

OMG South Korean setters, good mathematical problems coming on the way :)

»
22 месяца назад, # |
  Проголосовать: нравится +11 Проголосовать: не нравится

Omg announcement shorter than tourist round

»
22 месяца назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

This contest may be a bit late, I guess I fell asleep at that time.

»
22 месяца назад, # |
Rev. 4   Проголосовать: нравится -19 Проголосовать: не нравится

good luck everyone!

»
22 месяца назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

As a tester, I tested this round in the period about when I was orange for the first time.

Problems are nice tho!

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

очередной див 2. желаю всем удач решить его

  • »
    »
    21 месяц назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Спасибо, он уже давно прошёл, но я в нём нормально выложился

»
22 месяца назад, # |
  Проголосовать: нравится +26 Проголосовать: не нравится

My first contest was tourist round. I solved 1st 2 problem and earned 389 rating. This will be my 2nd contest .

»
22 месяца назад, # |
  Проголосовать: нравится +32 Проголосовать: не нравится

I will skip an academic seminar in my university and participate in this round.

»
22 месяца назад, # |
Rev. 2   Проголосовать: нравится -10 Проголосовать: не нравится

As a participant, I confirm that i will participate.

»
22 месяца назад, # |
  Проголосовать: нравится +24 Проголосовать: не нравится

Sometimes I really want to skip school.

»
22 месяца назад, # |
  Проголосовать: нравится -85 Проголосовать: не нравится

Please down me, thx.

»
22 месяца назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

As a tester, I enjoyed this round. Good luck!

»
22 месяца назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Thanks for your excitation to invite us to participate in round !

»
22 месяца назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

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

»
22 месяца назад, # |
  Проголосовать: нравится +6 Проголосовать: не нравится

Good Luck and Have Fun!

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

I will skip an academic seminar in my university and participate in this round

»
22 месяца назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

Wishing you all a positive delta!!

»
22 месяца назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

Best wishes for everyone

»
22 месяца назад, # |
  Проголосовать: нравится -55 Проголосовать: не нравится

Worst Contest I have Ever Seen. What are these strict time limits !?!?

»
22 месяца назад, # |
  Проголосовать: нравится +37 Проголосовать: не нравится

Me after solving C

Waiting for contest to end
  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится

    Same lol

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Can you please tell your approach on C?

    • »
      »
      »
      22 месяца назад, # ^ |
        Проголосовать: нравится +4 Проголосовать: не нравится
      • Approach for C;
      • Let sum of all the numbers [ 1 to 2n ] : S_2n = ((2n)*(2n+1))/2;
      • After the construction of pairs, we will get [n] consecutive numbers
      • let's say the minimum sum of any pair be x;
      • Now, the sum of these [n] consecutive numbers, S_x = (x) + (x + 1) + ... + (x + (n-1))
      • S_x = n*x + (n*(n+1))/2 = S_2n [ just the sum of all numbers ]
      • After solving the equation minimum sum possible => x = (3n + 3)/2;
      • Then just try to construct pairs with sum x, x+1, x+2, ..., x+n-1.
      • Hope this helps.
  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    same

»
22 месяца назад, # |
  Проголосовать: нравится +19 Проголосовать: не нравится

is that a pattern finding round?

»
22 месяца назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

Mo

Starting with problems A Motivation 100 to 50 B Motivation 50 to -100 C Motivation -100 to +50 Depression enters :)

»
22 месяца назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

How to solve E? Is this some dp? maybe we can precompute the maximum index, i can jump to from index j while keeping the sum of elements from i to j >= 0 . Am i thinking in the right direction ?

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится +4 Проголосовать: не нравится

    no you need to solve A+B first

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    I thought of doing a segment dp like:

    dp[L][R][0] — ans for [L; R]

    dp[L][R][1] — ans for (L;R]

    dp[L][R][2] — ans for [L;R)

    dp[L][R][3] — ans for (L; R)

    But had some troubles with calculating dp[L][R][0]. Other states are easy to calculate

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится
    Spoiler
»
22 месяца назад, # |
  Проголосовать: нравится +48 Проголосовать: не нравится

Might be an unpopular opinion, but I think all problems were very good and interesting. Congrats to the authors for a beautiful contest. I enjoyed doing the contest very much. Thanks!

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Did someone constantly get wrong answers on problem B?

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится

    it's me, huh! My final ratings will be negative. But next contest, i will gonna hit harder..

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится

    You probably converted the number to string and left a leading zero on during the output (not converting it back to int). It would fail for 101, where you would output 01 and 100. Just my guess. You would have to delete all the leading zeroes instead of just the first one

»
22 месяца назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

How to solve C?

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

How to solve B?

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Distribute digit by digit.

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Divide n into 2 numbers evenly. One number may be 1 greater than the other. Compare the 2 numbers digit by digit. The digits are either (1) same, (2) 1 vs 0, or (3) 0 vs 9. Keep track of the sum of digits of the 2 numbers so far. In case 3 above, distribute the 9 as 4 and 5 or 5 and 4 depending on the current difference of the sums of digits so far.

»
22 месяца назад, # |
Rev. 3   Проголосовать: нравится +10 Проголосовать: не нравится

E looks standard. Can it be solved by dp with d&c?

upd: i think i overcomplicated it

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится

    dp[i] = max(dp[i — 1], dp[j] — j + i) while sum(j + 1 ... i) >= 0 (j < i) using map to keep (sum[i], dp[i] — i) increase.

»
22 месяца назад, # |
  Проголосовать: нравится +46 Проголосовать: не нравится

C is too hard

»
22 месяца назад, # |
  Проголосовать: нравится +26 Проголосовать: не нравится

The difference between C and D was massive.

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

did anyone else also got wrong answer on test 5 in E

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится

    yeah me

    • »
      »
      »
      22 месяца назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      What was your approach.

      • »
        »
        »
        »
        22 месяца назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        I used binary search on previous minimas of sum<=sum[i] if sum[i]<0 for getting subsegment with maximum length ending at i.

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Yes, i did the classic dp like LIS but get WA on test 5 don't know why

    • »
      »
      »
      22 месяца назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      I know now i forgot about dp[i] = max(dp[i], dp[i — 1])

      • »
        »
        »
        »
        22 месяца назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Hello i am also doing same mistake in other method but not getting ig as i am getting same 126 as answer in test case 5. It will be a great favour if you please look into it

»
22 месяца назад, # |
  Проголосовать: нравится +10 Проголосовать: не нравится

I think that this round had very interesting problems with pretty beautiful possible solutions. Thanks for the contest!

»
22 месяца назад, # |
  Проголосовать: нравится +14 Проголосовать: не нравится

My solution to problem E:

First, create the prefix sum array $$$p_0 = 0, p_i = a_i + p_{i-1}$$$ and compress it. Let $$$dp_i$$$ denote the best answer for the prefix upto element $$$i$$$. Suppose the last segment we take containing $$$i$$$ goes upto $$$\ell+1$$$ and misses $$$\ell$$$. Then $$$\ell < i$$$ and we must have $$$p_i \geq p_{\ell}$$$, and the best possible answer in this case would be $$$dp_{\ell-1} + (i - \ell)$$$. To efficiently compute these values, create a max segment tree over the compressed $$$p_i$$$ values and each time we compute $$$dp_i$$$ as $$$i$$$ plus the maximum over the segment $$$[0, p_{i}]$$$ in the segment tree and after performing $$$dp_i = \max(dp_i, dp_{i-1})$$$ (in case we don't take $$$i$$$ in the optimum answer) we update the $$$p_{i+1}$$$th location by maximising it with $$$dp_{i} - (i+1)$$$. That's it, done. Overall solution works in $$$\mathcal O(n \log n)$$$.

»
22 месяца назад, # |
  Проголосовать: нравится +20 Проголосовать: не нравится

https://www.youtube.com/watch?v=1jbhevleu-Y Copy of Problem B...Do Something

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

ABCforces

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    how to solve C

    • »
      »
      »
      22 месяца назад, # ^ |
      Rev. 2   Проголосовать: нравится -9 Проголосовать: не нравится

      assume consecutive sum of n pairs is : k, k + 1, k + 2, ..., k + n — 1. If u add everything u have k*n + (n — 1)*n / 2. Which should be equal to 2n * (2n + 1) / 2 (sum of 1, 2, ..., 2*n). Equate both terms and you will get k = (3n + 3) / 2. Now figure out the pairing part by yourself, it's not that hard.

      • »
        »
        »
        »
        22 месяца назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Asks for a solution, gets "figure out xyz by yourself, it is not that hard".

        • »
          »
          »
          »
          »
          22 месяца назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          Hint: If you cannot figure out the pattern, try to write a brute force solution for small cases.

      • »
        »
        »
        »
        22 месяца назад, # ^ |
          Проголосовать: нравится +5 Проголосовать: не нравится

        haha, I did until this step, it's intuitive. I couldn't figure out the pairing part.

    • »
      »
      »
      22 месяца назад, # ^ |
        Проголосовать: нравится +7 Проголосовать: не нравится

      I brute forced for n=7 and the find the answer (4,8) (5,9) (6,10) (7,11) (1,12) (2,13) (3,14) then we are done.

      • »
        »
        »
        »
        22 месяца назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        hello sir, I am unsure of how to write a brute force algorithm for this question. Do you think you could help me? Thanks.

»
22 месяца назад, # |
  Проголосовать: нравится -8 Проголосовать: не нравится

my total score : 390-8*50.. It looks very difficult, was this contest really hard?

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    It's normal for a new account to solve only the first (or even zero) problem is the first contest. You just need to take more contests to get familar with the process of CF contests.

»
22 месяца назад, # |
Rev. 13   Проголосовать: нравится +8 Проголосовать: не нравится

Problem D cost much time for me and I didn't have enough time for E.

2D dynamic programming with 6 different arrays to maintain (RL, RL_sum, LL, LL_sum, LL_cnt, LL_cnt_sum) is too easy to make mistake at some details. I've spent much time to find a bug that I allocated too much space on the stack for 2D arrays (using something like ll RL[n][n], where n=3000) instead of declare them as global variables.

How to solve D
My approach for E (Now it has been accepted)

Update: Now my submission 192969220 has been accepted.

AC code of E
  • »
    »
    22 месяца назад, # ^ |
    Rev. 3   Проголосовать: нравится +7 Проголосовать: не нравится

    Observe that the answer is equal to the number of adjacent points which moves toward each other.

    We may check every two points $$$x_l,x_r$$$ and count the number of subsets in which $$$x_l$$$ and $$$x_r$$$ are adjacent and move toward each other, which is equal to $$$2$$$ to the power of $$$(L_{l,r}+R_{l,r})$$$, where:

    $$$L_{l,r}$$$ represents the number of points satisfying $$$x_r-x_l<x_l-x_p$$$;

    $$$R_{l,r}$$$ represents the number of points satisfying $$$x_r-x_l\le x_p-x_r$$$.

    for a fixed $$$l$$$, $$$f(i)=L_{l,i}$$$ is monotonic. Similar for $$$R$$$.

    The code for the solution above is very easy to implement.

    • »
      »
      »
      22 месяца назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      [deleted]

    • »
      »
      »
      22 месяца назад, # ^ |
        Проголосовать: нравится +1 Проголосовать: не нравится

      Why are you not considering point which can possibly lie in between xl & xr in the subset? For ex: If x[]={1,13,14,20} and if l=1 & r=4, then by your soln ans would be 1 ({1,20} would be the only such subset), however there could be one more subset ({1,13,14,20}) as well, here also 1 and 20 would meet each other.

      • »
        »
        »
        »
        22 месяца назад, # ^ |
        Rev. 2   Проголосовать: нравится +1 Проголосовать: не нравится

        for {1,13,14,20}, although 1 and 20 meet each other, they end up in the same place as 13 and 14's. So it is calculated when l=2 and r=3.

        • »
          »
          »
          »
          »
          22 месяца назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          Ok, so when two particles collide, they just stop there. I thought that the colliding ones just disappear!

      • »
        »
        »
        »
        22 месяца назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        It's the sum over all $$$(l,r)$$$ such that $$$x_l$$$ and $$$x_r$$$ meet each other and are adjacent.

    • »
      »
      »
      22 месяца назад, # ^ |
        Проголосовать: нравится +9 Проголосовать: не нравится

      Same approach. It is a miracle that this came to my mind during the time of contest. Finally i can see some improvement.

      Thanks to this contest i reached specialist rating.

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится

    I didnt use DP. I just iterated over every pair $$$(i,j)$$$ and found the number of subsets of points such that $$$i$$$ and $$$j$$$ meet each other. The idea and code are both simple.

    Code for D
    • »
      »
      »
      22 месяца назад, # ^ |
      Rev. 2   Проголосовать: нравится +1 Проголосовать: не нравится

      Excellent solution. Comparing to yours, my solution can even be regarded as wrong answer.

    • »
      »
      »
      22 месяца назад, # ^ |
        Проголосовать: нравится +4 Проголосовать: не нравится

      I see that you've used this header file #include <atcoder/modint>

      Is it supported in codeforces?

      • »
        »
        »
        »
        22 месяца назад, # ^ |
        Rev. 2   Проголосовать: нравится +2 Проголосовать: не нравится

        No, it is only available in Atcoder, not in codeforces. My actual submission looks like this

        But the AtCoder Library GitHub repo provides a python script that takes a C++ file and replaces the atcoder header file with the atcoder library, enabling it to submit to all platforms. I also use the VSCode extension called CodePal which automates this process.

  • »
    »
    22 месяца назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    Can you please explain your dp approach for D . I tried doing this by dp but failed and my obervation skills suck , hence wasnt able to do the question the other way too.

    • »
      »
      »
      22 месяца назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      We consider what would happen if we add a new dot at right. We call the previous 2 right-most dots i, j (assume there's >=3 dots in the set, because set with only 2 dots is trivial). In the previous set j would move left since it's right-most dot, and i could move left or right. If j still move left after we add a new dot, the number of final points will not increase. But if j move right, there's 2 situations: if i moves left (we call this situation LL), then it would like RR...LL --> RR...LRL, we can see there's one more final point (by the "RL" we've created), and if i moves right (we call this situation RL), then it would like RL --> RRL, where number of final points remained same. Therefore we can get the transition formula. (don't forget to consider situations of RL when there's only 2 dots in the set)

      Also this DP approach need to store prefix sums for optimization. See this comment for a simpler solution.

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Was D just a DP on pos[previous][current] then looping through [current+1, n) to try placing the next particle?

The observation there I believe is that for all values <= a[i] + (a[i] — a[p]), the direction is left, while the rest are right, so you can do some casework there to add on that subarray after precomputing prefix sums (the number of dots is equal to the number of adjacent RL's that show up in the final subsequence), but I had a stroke implementing ;-; does anybody have a simple enough implementation of that idea?

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Wouldn't this be $$$n^3$$$ ? Each of your $$$O(n^2)$$$ values take some $$$O(n)$$$ time unless there is a trick I am missing.

    • »
      »
      »
      22 месяца назад, # ^ |
      Rev. 5   Проголосовать: нравится 0 Проголосовать: не нравится

      I couldn't even get the n^3 working cuz I'm bad but I think that the recurrence would look like


      for j in range(i+1, n): if (P is closer to I than J): // place an L in this case DP += solve(i, j) //(if previous was R, then add 1, otherwise don't add) else: // place an R in this case DP += solve(i, j) (never add in this case)

      Then since every single transition is just solve(i, j) + (a bool) in either case, then you split it up into the ranges whether the bool is true or false with bsearch. The second range never gets added to, and the first range you would casework and then multiply by the length of that range.

      So in the end the transition is DP += (sum of everything from DP(i, [j+1, n) )) + (len of good range) * (caseworked boolean)

      (though again I didn't get the casework working so I'll still need to work out the conditions)

      Though it seems like other people had easier solutions ;-;

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    had a similar observation but could not come up with the implementation ;(

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    I have a simpler approach, iterate over i,j (i<j), for every i,j find out a,b such that a<=i,j<b and if every element between [a,b) is not present in a subsequence (except i,j) then $$$a_i$$$ moves towards $$$a_j$$$ and vice versa. Also, $$$b-a$$$ should be minimum so that we exclude minimum elements. Now add $$$2^{n-(b-a)}$$$ to the answer.

    Code: 192957360

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Let's assign directions to the dots in some subset, they will look like:

    (RR...RRLL...LL)|(RR...RRLL...LL)|......|(RR...RRLL...LL)

    So the number of distinct endpoints is the number of "LR" adjacent pairs + 1 (to account for the first block). So we can iterate on every pair $$$(i,j)$$$ and count in how many subsets they can exist as an adjacent LR pair.

    Based on $$$x[j]-x[i]$$$, we can know how many dots before $$$i$$$ can be directly before $$$i$$$ in a subset and how many dots after $$$j$$$ can be directly after $$$j$$$ in a subset. If $$$[l, i-1]$$$ is the left range and $$$[j+1, r]$$$ is the right range, then the left subset counts can be $$$2^{l-1}$$$, $$$2^l$$$, ..., $$$2^{i-2}$$$, and the right subset counts can be $$$2^{n-r}$$$, $$$2^{n-r+1}$$$, ..., $$$2^{n-j-1}$$$.

    So, add $$$(2^{l-1}+2^l+...+2^{i-2})\cdot (2^{n-r}+2^{n-r+1}+...+2^{n-j-1})$$$ to $$$ans$$$. Make sure to initiate $$$ans$$$ with $$$2^n-n-1$$$ to account for the first block in all the subsets.

    Submission

»
22 месяца назад, # |
  Проголосовать: нравится -7 Проголосовать: не нравится

B was much more difficult than C In B only case we need to worry about is n%20==19 but even after that it was more of implementation problem than maths which it seemed to be initially

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    you can solve B with binary search

    • »
      »
      »
      22 месяца назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Could you tell how please?

      • »
        »
        »
        »
        22 месяца назад, # ^ |
        Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
        code
  • »
    »
    22 месяца назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    Since the guy with more elo literally posted the same answer as mine and my comment is being ignored because of it, I might as well just remove it.

    • »
      »
      »
      22 месяца назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      you're too sensitive for these things

      • »
        »
        »
        »
        22 месяца назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Yes I am, because it's happened before. Good thing it was a 5 minutes comment and not a full editorial.

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится +15 Проголосовать: не нравится

    $$$B$$$ can be implemented simpler. Iterate over digits. If digit is even, split it equally for both answers. If digit $$$x$$$ is odd, add $$$x / 2$$$ to first answer, $$$x / 2 + 1$$$ to second answer and then swap them.

    At the end remove leading zeros.

    Example: 16934 -> 1**** + 0**** -> 13*** + 03*** -> 035** + 134** -> 1342* + 0351* -> 13422 + 03512

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Feels like massive cheating on C, I might be wrong but it feels like it.

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится +9 Проголосовать: не нравится

    Cheating is happening too much nowadays..

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    i guess it is for both B and C, B was much harder than c

    • »
      »
      »
      22 месяца назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      In what universe is B harder than C, only if you cheated cause code might be more trivial for C. To figure out idea for B it takes less than 50 seconds.

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

What is test 2 for B?

»
22 месяца назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

guessforces

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Any proof for C I solved it by just some observations

  • »
    »
    22 месяца назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    if n is even then "NO". else sum of first pair should be (3*(n+1)/2). proof: S1 + (S1+1) + (S1+2) + ....... + (s1+n-1) = 2n*(2n+1)/2

»
22 месяца назад, # |
  Проголосовать: нравится -19 Проголосовать: не нравится

The worst round

»
22 месяца назад, # |
Rev. 4   Проголосовать: нравится -13 Проголосовать: не нравится

Imagine asking how to solve D and getting -13 ^D

»
22 месяца назад, # |
Rev. 2   Проголосовать: нравится +1 Проголосовать: не нравится

It was great PatternForces Round <3

»
22 месяца назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

I wish C was 1500-1600, but unfortunately it's more likely to be 1200

»
22 месяца назад, # |
Rev. 4   Проголосовать: нравится 0 Проголосовать: не нравится

Anyone know why my sol for D is wrong?

dp[i] stands for sum where i is chosen, and tot[i] is total of chosen & not chosen

dp[0] = 1;
tot[0] = 1;
for (int i = 1; i < n; i++) {
	dp[i] = 1;
	for (int j = 0; j < i; j++) {
		if (j == 0) {
			dp[i] = (dp[i] + 1) % mod;
		} else if (x[i] - x[j] < x[j] - x[j - 1]) {
			dp[i] = ((dp[i] + tot[j - 1]) % mod + mod_pow(2LL, j + 0LL, mod)) % mod;
		} else {
			dp[i] = ((dp[i] + dp[j]) % mod + mod_pow(2LL, j + 0LL, mod)) % mod;
		}
	}
	tot[i] = (tot[i - 1] + dp[i]) % mod;
}
cout << (tot[n - 1] - n + mod) % mod << '\n';
»
22 месяца назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

I wast stuck in problem C for approximately 2 hours, In problem C multiple kind of pairing was possible so it must be mentioned in the question that we can output any valid answer. I am not talking about order of pairs... actually you can pair any number with 2 values and accordingly I found 2 valid answer exists for each odd number.

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Any Hints For D? I Was Thinking In A DP Direction :(

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    the main observation is that the distinct points increase when $$$ith$$$ index moves left and $$$i+1th$$$ index moves right. Now try to figure out the contribution of each $$$i$$$ seperately by fixing the position that moves left and the position that moves right.

»
22 месяца назад, # |
  Проголосовать: нравится +9 Проголосовать: не нравится

Toooooooooooooo much Cheating

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Can anyone explain E for noobs?

»
22 месяца назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

Why is answer no for even n in C?

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    s, s + 1, ..., s + (n — 1) are sums. So s * n + n * (n — 1) / 2 = 2n * (2n — 1) / 2, so s = (3n + 3) / 2 => n % 2 == 1

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится +2 Проголосовать: не нравится

    s, s + 1, -- s + n — 1

    suppose they are sum of pairs as given in problem

    if we put

    s + s + 1 + s + 2 — = 1 + 2 -- 2n

    we get

    n * s + n * (n — 1) / 2 = n * (2n + 1) we get

    s + (n — 1) / 2 = 2n + 1

    s = 3 / 2 * (n + 1)

    for s to be integer n + 1 should be even

»
22 месяца назад, # |
  Проголосовать: нравится +4 Проголосовать: не нравится

An unbalanced round. I got ABC very quickly, but couldn't come up with a fast enough solution for D in time and didn't attempt further problems. I won't say that the problems were bad because they weren't (C was just guessing a pattern, didn't like it that much; others were good). I just think that there should've been a 1600-1800 rated problem between C and D. But the round was still nice.

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    yea, I agree. Maybe A,B,C could've been made slightly harder to ease up the gradient.

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Actually had more trouble with C than F haha.

»
22 месяца назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

solved D during the contest, but forgot that modular arithmetic template takes $$$O(\log n)$$$ to calculate $$$2^n$$$... So got TLE couple of minutes before the end after simply rewriting formula I got on paper :(

contest submission: https://codeforces.me/contest/1788/submission/192959799

upsolve submission: https://codeforces.me/contest/1788/submission/192968394

»
22 месяца назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

Great contest with good problems , thanks!

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Great contest, and super fast rating changes, wow! Absolutely loved all the problems that I read (A-E)!

Also, while I understand the need to have tight TLs on D, as $$$n^3$$$ solutions were to be rejected, I'm slightly irked by the fact that my Java submission failed despite being $$$n^2log(n)$$$. Anyway, that was to be expected since I was using TreeMaps, and Binary Search is understandably faster. So yeah, happy to have learned one more thing :)

»
22 месяца назад, # |
  Проголосовать: нравится +4 Проголосовать: не нравится

Great contest with very clear statements!

»
22 месяца назад, # |
Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

ok thanks

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    The product of the array can go up till pow(2,1000) which is way too large to even fit in long long

»
22 месяца назад, # |
Rev. 3   Проголосовать: нравится +8 Проголосовать: не нравится

AC submissions at the last second

Ac submissions at the last second is very nice , but i am pretty sure that last second submission of problem D by gsmdfaheem is copied. i have seen exact same code that is leaked at just 10 minutes before the contest end.

he just changed the variable names.

Channel
Leaked-Code
His submission at last second
»
22 месяца назад, # |
  Проголосовать: нравится +7 Проголосовать: не нравится

In B if i print 1 as 01 it consider it wrong but both are equivalent integers and no intructions are provided regarding leading zero .

stupid testing got WA 2 times.

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

According to me my E is working but my solution gets WA on test 5 can anyone please help me where i am lagging https://codeforces.me/contest/1788/submission/192944044

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

GOT AC LAST SECOND

»
22 месяца назад, # |
Rev. 3   Проголосовать: нравится +12 Проголосовать: не нравится

 D just 3 seconds before!!

»
22 месяца назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

The time limit of F is too tight. I wrote the correct solution but got TLE on pretest 58. I think it's better to decrease the value of $$$n,q$$$ to 1e5 or increase the tl to maybe 5 secs.

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Problems are fun! thanks to authors :)

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Can someone give a small test case on which my solution 192923926 fails?

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Very very very standard problem E and F. I cannot accept that.

»
22 месяца назад, # |
  Проголосовать: нравится -10 Проголосовать: не нравится

Weak testcase in B no. In the statement, given 1<=n<=1e9. Unconciously, I used int(as datatype) and passed the pretest. After the contest I noticed my mistake and expected to get wrong answer. But, after final judgement , my solution passed all the testcase :)

192907426

  • »
    »
    22 месяца назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    What do you think range int has in GNU C++17 7.3.0 (your used compiler)?

    You can always check in Custom Invocation smth like this:

    #include <limits>
    #include <iostream>
    
    using namespace std;
    
    int main() {
        using IntLimits = numeric_limits<int>;
        cout << IntLimits::min() << ' ' << IntLimits::max() << endl;
        return 0;
    }
    
»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Great contest! you can find the video editorials for problem C and D here .

hope this helps you! happy coding!

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Hello! I submitted two implementations of treap in E, and the "faster" version works 5 times longer! Can anyone explain it? "slower": 193052447 "faster": 193052503 I know that "faster" gets TL on a test with a = {0, 0, 0, ..., 0}, but I can't realize the reason of O(n) height of a treap.

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

hopeforces

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Problem B. Sum of Two Numbers ***** my solution get wrong answer on test case 8, my solution is true and that makes me sure that I take this code copy and submit it again and get accepted, plz check it for my. the solution which gets wrong answer during the contest the same solution gets accepted after the contest !!!

»
22 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Lately I receive a message that my submission 192896600 is same as 192935411.I cheked it and find that his solution to the problem is different from mine.I guess may be comments at the end of the code is the reason why two submissions is thougt as same.

In addition, I can give evidence that I used this template before him. mine:188824606 his:189071540

[user:KAN][user:MikeMirzayanov][user:azberjibiou]