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

Автор snowysecret, 3 года назад, По-английски

Thanks for participating, hope you enjoyed the problems! Implementations for the problems are chosen randomly among testers, and I made some changes to their codes (for example, deleted meaningless comment lines). Please do not hesitate to provide feedback in the comments, so I can improve in setting problems next time.

UPD: Sorry but there is a checker bug in problem E. All submissions of problem E will be rejudged soon.

UPD2: Rejudge done, the round remains rated.

Statistics

1617A - Forbidden Subsequence

Hint
Solution
Implementation (C++, I_Love_YrNameCouldBeHere)
Fun fact

1617B - GCD Problem

Hint
Solution
Implementation (Solution 1, Java, SecondThread)
Implementation (Solution 2, C++, dbsic211)
Implementation (Solution 3, C++, anthony123)

1617C - Paprika and Permutation

Hint 1
Hint 2
Solution
Implementation (C++, physics0523)

1617D1 - Too Many Impostors (easy version)

Hint 1
Hint 2
Hint 3
Solution
Implementation (C++, dbsic211)

1617D2 - Too Many Impostors (hard version)

Thanks must be given to arvindf232 and generic_placeholder_name for the solution.

Hint 1
Hint 2
Solution (Step 1)
Hint 3
Hint 4
Solution (Step 2)
Implementation (C++, dbsic211)

1617E - Christmas Chocolates

Hint 1
Hint 2
Hint 3
Solution (Step 1)
Hint 4
Solution (Step 2)
Implementation (C++, physics0523)
Разбор задач Codeforces Round 761 (Div. 2)
  • Проголосовать: нравится
  • +425
  • Проголосовать: не нравится

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

ooh fast editorial :)

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

omg fast editorial

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

    As lck, I am offended by your template :(

    Bad Kevin, I will throw you into River Cam when u arrive at Cambridge

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

Today B screwed me.

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

    It was easy but very observational, if you can observe quick it's pretty easy otherwise it screws.

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

    There must exist a solution for c=1 under the given constraints.

    I still don't exactly see why that is the case....

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

      Assume $$$c = 1$$$, you are left with $$$n - 1$$$ which must be divided in two groups, $$$a$$$ and $$$b$$$.

      Dividing by $$$2$$$ will either equally distribute the amount or it won't.

      In the second case, one value will always be $$$+1$$$ than the other and $$$gcd$$$ of two consecutive numbers is $$$1$$$.

      In the first case, both numbers will either be odd or even. If both numbers are even then simply subtract $$$1$$$ from one value and add it to the second value, by doing this both numbers will be odd now with a difference of $$$2$$$, hence $$$gcd = 1$$$. If both numbers are odd, subtract $$$2$$$ from one value and add it to the other value. By doing this you will have two odd numbers with a difference of $$$4$$$, hence $$$gcd = 1$$$

      Maybe this is a complicated way to think about it but that's how I did it

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

        How to prove two odd numbers are mutually prime with a difference of 4 between them ?

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

          if the difference between the two numbers is 4,their gcd cannot be greater than 4.now since the numbers are odd 2 and 4 won't divide them.so now we are left with 1 and 3.let's say the gcd is 3 so it divides the smaller number x the next numbers it will divide will be x+3,x+6 but our second number is x+4. so 1 is their gcd.

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

          gcd(x+4, x) = gcd(x+4-x, x) = gcd(4, x) but x is odd => gcd(4, x) = 1

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

        Nice, thanks for the explanation!

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

        When it comes to proving that there exists a pair $$$(a, b)$$$ for $$$c=1$$$ which solves the problem one can use Goldbach's conjecture (which was shown to work for numbers $$$\leq 10^{18}$$$). If $$$n-1$$$ is odd then it's easy to see that we can choose $$$a=x$$$ and $$$b=x+1$$$ where $$$x=\frac{n}{2}-1$$$, but when $$$n-1$$$ is even GC gives us that there exist 2 primes $$$p, q$$$ such that $$$p+q=n-1$$$.

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

        Thanks your explanation was lucid and simple .I was able to frame the solution and am sure it will be helpful in upcoming problems. May God bless you with more ratings

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

Great contest! I especially enjoyed solving problem D, thanks :)

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

Great contest! Great problems! Great editorial! Sad orange can’t play._.

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

Lightening fast editorial :)

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

Time complexity of editorial: O(1)

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

In the solution of problem C, the observation will be $$$x$$$ $$$mod$$$ $$$y$$$ $$$< \lceil \frac{x}{2} \rceil$$$ if $$$x$$$ $$$>=$$$ $$$y$$$

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

Problems were good and so the quality of the editorial. All editorials should have hint spoilers.

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

    I like how the author split the editorial into hints, solutions, and code snippets, and had them spoilered separately, which would be helpful for beginners who are learning cp;) (But it’s also extra effort, so I wouldn’t go as far as to ask for having this in particular, rather, I’ll just treat it as a bonus)

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

As a tester, I have some fun facts about problem D:

Originally, D had only one version, which is the current D1. Then I tested D and came up with a $$$\frac{4n}{3} + O(1)$$$ query solution. (Actually, originally, $$$n \bmod 3 = 0$$$ wasn't a thing, and the lower bound was $$$4$$$, so getting that to AC was a lot of pain :v) That solution became D2 — except that later, arvindf232 came up with the $$$n + 2$$$ query solution. Then we had a problem, which was that we couldn't decide which of $$$2n$$$, $$$\frac{4n}{3}$$$, or $$$n$$$ should be the official D1/D2. In the end we decided that $$$2n$$$ for D1 and $$$n + O(1)$$$ for D2 would be best for balance.

We (or at least I) thought that D2 was more difficult than it ended up being. We had the idea of changing the distribution to 1750-1250-2500, but it never came to pass. In my opinion, the original distribution turned out to be better. :v

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

I'm curious, how many participants actually proved their solution of B?

EDIT: I'm not looking for proofs of this solution or that solution. I'm more interested in the ratio of "guessed/hoped" vs "solved". Actually in some sense it's more interesting to hear from people who didn't prove their solution.

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

    Ya, i have prrof for my solution. By choosing c = 1, the problem can be proved by checking even or odd of number and its half. submission: https://mirror.codeforces.com/contest/1617/submission/139495888

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

    The 3-case people probably proved their solution, but probably most other solutions didn't :v My "proof" was a vague understanding of probability and a heavy dose of inshallah :)

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

    Me. I used the approach of finding the first prime that does not divide n — 1, which must exist within the first 10 primes since n is at most 1e9.

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

    if n-1 is odd then answer is some consecutive number but if it is even, by goldbach's conjecture it follows that it can be written as a sum of two primes.

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

    I proved it but I think it's hackable. Solution Link

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

    You can check it here

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

    Ummm Yes, I can prove my solution

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

    It took me 44 mins on B just to prove that a brute force soln works and in the end i coded the entire proof lol .When i was a newbie i used to solve these type of questions pretty fast but as my experience increased i started proving things haha.Anyways i liked the contest very much

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

    i assumed the gcd is 1 because otherwise the complexity would be exponential then i made a program that told me how many numbers can be obtained from x%y with 1<=y<x and those were all from 1 to (x-1)/2 so i kind of proved it

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

139546379 I don't know why I get TLE on D2, I think my time complexity is $$$O(n)$$$.

Edit: I know where was wrong. I didn't handle the case when query return -1

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

Thank you so much!!!

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

Can we do D2 in $$$\leq n$$$ queries?

It can be done is $$$n + 1$$$ by reducing $$$1$$$ query from the editorial's solution using the fact that the two people between the impostor and crewmate we detected, are of opposite type, so we can just ask for one of them.

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

    I don’t think $$$< n$$$ is possible, but exactly $$$n$$$ queries is possible (tho idk how)

    There are around $$$2^n$$$ possible answers, and each queries gives a binary answer. So the theoretical lower bound is $$$\log_2(2^n)=n$$$ queries.

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

    (nevermind, I was wrong here.)

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

      I don't think this works in all cases. If the different 3-tuples occur somewhere in between, we will need $$$n+1$$$ queries still.

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

        Yes, with this way it is mathematically impossible to get exactly $$$n$$$ queries. If there is a $$$n$$$ query solution it won't be this one.

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

Nice problems great editorial with hints. overall great contest!!! Well done snowysecret.

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

Was totally confused at C. Luckily understood the meaning of k range to solve D1 and that saved my rating for this contest or else whoooooosh it would have gone

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

Problem D in n+1 queries: 139550123

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

How to think the solution of problem B during the contest....

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

    Actually, first observation is gcd(a,b)=c so a=cx and b=cy where x and y are mutually prime. So the given equation becomes c*(x+y+1)=n . so c is a factor of n. Now you think that if n is a prime number, then it's only factors are 1 and the number itself. if c=the prime number itself, then x+y+1=1 ===> x+y=0 which is not possible according to the given problem. So c=1 for prime numbers. On the other hand the equation will be holding for composite numbers as well so, you can proceed with c=1. therefore the equation becomes x+y+1=n or x+y=n-1. Now, we have already said that x and y are mutually prime. So the immediate thing that should come to mind is that two consecutive numbers are equal . if n-1 is odd, then you should know that an odd number can be written always as a sum of two consecutive numbers (if x is odd, then x=x/2+x/2+1 ...x unrelated to the explanation above) . otherwise,n-1 is even, so a possibility is x=(n-1)/2 and y=(n-1)/2 . But x and y are coprime, so probably, we can go one step forward for y and one step backward for x .Then x=(n-1)/2 -1 and y=(n-1)/2+1 .Now if originally x and y were even numbers, then the new x and y must be odd numbers. These two odd numbers with a difference of one will always be coprime. Otherwise,if both new x and y are even, then decrease x one more time and increase y one more time .Again we end up with two odd numbers and these two with a difference of 4 will always be mutually prime .

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

Great problems, fast editorial with hints, I hope more of these contests will be held :)

Thanks snowysecret

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

Superfast editorial!

What's more, with hints!

I enjoy the contest very much, the problems are fabulous, thank you!

»
3 года назад, # |
  Проголосовать: нравится -9 Проголосовать: не нравится

For anyone looking for video editorial you can check mine out

It's only up to D1 tho

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

Problems were nice, although I could try only up to D1.

Hoping to see you in another round :)

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

borked checker rejudge time

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

Can anyone tell me, for problem D1 why I am getting the wrong answer verdict on Test Case 1?

Any help would be appreciable. Thank you :)

Submission

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

    You are only printing the elements of ans. You also need to print the size of ans before you print it's elements.

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

      Thanks, buddy! Now my code is asking too many queries so can you or anyone tell me any optimal way to solve this question.

      I spent too many queries just to find one crewmate and one imposter to get the answer so is there is any optimal way to find them?

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

        You can read the editorial. It tells you how to find one crewmate and one imposter in exactly n queries.

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

SIUUU!

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

In problem B , why Brute force solution is working

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

    Because there are only limited divisors of $$$n - 1$$$, which means that eventually there are going to be two coprime numbers. There's some math that proves this, but ehh, nobody cares enough to prove it.

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

    because the gap of two prime number at most 300 in the range 10^12. so,when you picked up a big prime ,the other side is lower than prime.so there gcd is 1. for example, n=34,if we pick a prime 29,then the other side is (34-29)-1=4 so a=29,b=4 and gcd(29,4)=1.

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

My more complicated, less elegant solution to D1:

  • Make queries of the form (1, 2, i) for i in [3, 2n/3 + 1]
  • If the results are not all the same, we immediately know 1 and 2 are different, and we easily have the answer ans[i] = query(1, 2, i).
  • Otherwise, if all of the results are the same, then we know 1 and 2 are whatever the result is. Proof: assume that 1 and 2 are different but all the queries [3, 2n/3 + 1] returned the same result. Then there are a total of (2n/3+1 — 3 + 1) same results, plus 1 for either 1 or 2 matching, for a total of 2n/3 of the same, contradicting the constraint.
  • WLOG, say 1 and 2 are imposters. Now, query all the disjoint triplets that haven't already been queried (i.e. all but (1, 2, 3)). We know one of the triplets must return 1 (same reasoning as in editorial solution), having >= 2 crewmates. Let the triplet be (a, b, c).
  • Of the queries (1, a, b), (1, a, c), and (1, b, c), at least one of them will return majority crewmate, and the two people that aren't 1 are crewmates. This step takes at most 2 queries (since after 2 failures, there is only one option left).
  • By now, we've identified 1 crewmate and 1 imposter, and can determine the remaining (n-4) people with the simple queries.

So in the worse path, we use (2n/3-1) + (n/3-1) + 2 + (n-4) = 2n queries.

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

Very nice trick to solve D2

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

can anyone help me with this code :

139558441

a lot of thanks to anyone who can help me

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

    Try this test case:

    1
    2
    8 4 
    

    Expected output is 2, while your code produces -1.

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

      my code produces 2 not -1

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

        It's because you're not handling multiple test cases correctly. Just wrap this testcase with another one, and you can spot the error.

        For example, on the input

        2
        6
        4 1 7 8 8 3 
        2
        8 4 
        

        your code produces -1 -1 while the intended output is -1 2.

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

can someone please tell why this is giving me RTE on the first test case? it is working fine on my compiler https://mirror.codeforces.com/contest/1617/submission/139558421

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

I like the A question which made me an orgasm

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

can anyone please explain this? in problem B solution 3 if (n%2==0) cout<<"2 "<<(n-1)-2<<" 1\n";

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

If you are interested in video solutions, here are the solutions for the first 4 problems.

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

Whyyyyy.... your mistake on E checker cost me 140 rating :(

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

.

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

    5%4==1 5%3==2 9%6==3 14%10==4 5 is already left thus we can make a permutation in 4 moves. Hope this helps

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

I tried to hack my solution but I got "Unexpected verdict". Is there a problem with the solution to that problem?

Screen-Shot-2021-12-16-at-14-38-46

The test is

2

7 9

The particular thing about that test is that the diameter of the tree shouldn’t consider the node 0, (just nodes 7 and 9 in this case) my solution didn’t consider that and that is the reason of the wrong answer. This happens when all the nodes in the input lie in the same path from the root to the farthest node. Please consider adding a similar test.

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

I've implemented the idea of D2 on D1(6 queries), but wasn't aware that same way I can solve D2. And i also missed the simple idea of D1!!

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

Nice Contest snowysecret

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

Fast editorial! Thanks!

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

Problem E is really nice, good job!

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

Is there anyone can solve D2 in n queries? I can just solve it in (n+1) queries!

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

I used Trie to solve E. Submission link

(I know it's overkill but the logic is somewhat different from the one in editorial)

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

for Problem D1,why we need query $$$(n-1,n,1)$$$ and $$$(n,1,2)$$$ ?

It seems that query $$$(1,2,3)$$$ to $$$(n-2,n-1,n)$$$ can find one pair of crewmate and impostor.

can give me a counter-example?= ^ =

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

Could someone please tell me whats wrong with my d2 solution? I am getting the same output as testcase 1, but its showing "Incorrect set of impostors"?

Here's my code

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

Since the number of impostors k and crewmates n-k satisfy k>n/3 and n−k>n/3, there must be one pair of adjacent queries that are different.

Can someone explain why?

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

    You know that n is divisible by 3. So you can split it into x intervals of 3 each, such that x*3=n. So assume x=n/3.

    Now, k>n/3 =>k>x and k<2*x. so k belongs to [x+1,2*x).

    Applying pigeon hole principle, you have x intervals and a minimum of x+1 impostors to fill, so at least one interval will have 2(or more) impostors.

    With this, it wont be difficult to see that ~~~~~ for any n and k, that satisfy the constraints, the number of impostors k and crewmates n-k satisfy k>n/3 and n−k>n/3, there must be one pair of adjacent queries that are different. ~~~~~

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

    According to the pigeon hole principle, As long as one adjacent 0-majority tuple and 1-majority tuple exists, there is exactly 4 cases of one kind of tuple.

    0-major -> {0, 0, 0}, {0, 0, 1}, {0, 1, 0}, {1, 0, 0}; 1-major -> {1, 1, 1}, {1, 1, 0}, {1, 0, 1}, {0, 1, 1}.

    for the {0-major} + {1-major} and {1-major} + {0-major} cases, brutally select each tuple, pair them up, try all 2 * (4 * 4) = 32 cases, we can see there will always be at least one 4-consecutive indices {id, id + 1, id + 2, id + 3} from all 6 places for each case, for which query {id, id + 1, id + 2} and query{id + 1, id + 2, id + 3} differs.

    For example check 2 tuples {0 1 1} + {0 0 0}, start with the second index, {1 1 0 0} meets our need.

    The method may be kind of tedious, I wonder if other elegant proofs exist.

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

In problem D, I wonder what "The jury is adaptive" means. Why there are still feedbacks of "wrong set of impostors"?

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

Problem D is pretty amazing. Loved to upsolve it.

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

Can anyone explain me the meaning of "FST","AK"?

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

I have a solution to problem E which does not involve graphs in any way.

At the beginning, our array values fit in range $$$[0, 2^{30}]$$$. Let's now divide the array into two parts $$$L$$$ and $$$R$$$, where $$$L$$$ will contain all values $$$\le 2^{29}$$$ and $$$R$$$ will contain all larger values.

Now suppose $$$(x, y)$$$ is the optimal pair we are searching for. Here comes a crucial observation. If both $$$(x, y)$$$ are in $$$R$$$ they are both larger than $$$2^{29}$$$ so we cannot use any $$$k \le 29$$$ operation on them. The only way to continue is to use $$$k = 30$$$ and make them both less than $$$2^{29}$$$.

Also suppose $$$x \le 2^{29}$$$ and $$$y > 2^{29}$$$. In this case we have to transfer one value to the other side by using $$$k = 30$$$, but transferring $$$x$$$ is never optimal. Let's prove it.

Case $$$x = 2^{29}$$$ is trivial. Otherwise $$$x < 2^{29}$$$ so $$$2^{30} - x > 2^{29}$$$ and since also $$$y > 2^{29}$$$ we arrive at the previous state when we are forced to decrease both of them using $$$k = 30$$$. This means that it is always better to do an operation on $$$y$$$, again reducing it to some value $$$< 2^{29}$$$ and continue from there.

All the reasoning above means that all values $$$R$$$ have to be reduced in one operation to become less than $$$2^{29}$$$ and after that we can merge those values with $$$L$$$ and repeat our algorithm again with a threshold $$$2^{29}$$$.

We can repeat this process until we arrive at a simple case when all values are in range $$$[0, 1]$$$. Here we can just consider a transition $$$0 \rightarrow 1$$$ and we are done.

This solution can be implemented in various ways. One I can think of is to store $$$L$$$ and $$$R$$$ as sorted vectors and merge them using two pointers. But I personally think that maps are the most simple and elegant way. Maps introduce an additional $$$\log n$$$ factor, resulting in a $$$O(n \log n \log 10^9)$$$ solution overall which is still fast enough considering a very generous time limit.

Here is my submission: https://mirror.codeforces.com/contest/1617/submission/139683868

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

[My Submission](https://mirror.codeforces.com/contest/1617/submission/139840155

Can someone tell me why my code to Problem D1 is getting Idleness limit exceeded even though I flushed wherever required. Thanks in advance.

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

Sorry if it's obvious, but why is the graph formed in E connected? I see that there are no cycles but how do we know that we can get from any $$$x$$$ to any $$$y$$$?

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

I think this is not the intended solution for 1617B - GCD Problem...

Link : 141021665

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

can someone tell me why i am getting WA on testcase 2 in this solution : https://mirror.codeforces.com/contest/1617/submission/141883310

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

Can anyone tell me what's wrong with my code? I've coded differently, but the approach is same as given for problem C.
142936588

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

In Problem C, According to Editorial Solution I found -1 as output when I provide array = {1, 2, 7, 8} as Input. But here the output should be 2. Like for array[3] = 7 we can choose x = 3 and 7 % 3 i.e. 4 lies in [1, n], similarly for array[4] = 8 we can choose x = 5 and 8 % 5 i.e. 3 lies in [1, n]. hence we can obtain the permutation as {1, 2, 4, 3} which should be acceptable. May be I am wrong if anyone found the proper solution please reply ASAP.

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

    $$$7 \% 3$$$ is $$$1$$$ not $$$4$$$, since the remainder when $$$7$$$ is divided by $$$3$$$ is $$$1$$$.

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

Really, Great Editorial :)

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

There exists a completely different and overcomplicated reasoning for the solution of problem E:

Notations:

  • $$$lsb(x)$$$: least significant set bit in binary representation of $$$x$$$.
  • $$$msb(x)$$$: most significant set bit in binary representation of $$$x$$$.

Firstly, let's visualize the effects of an operation $$$x = 2^k - x$$$ on the binary representation of integer $$$x$$$.

  • In the trivial case, if we choose $$$k$$$ such that $$$2^k = x$$$ then $$$x$$$ just turns $$$0$$$.
  • When we choose some $$$k$$$ such that $$$2^k > x$$$, observe that the operation is essentially equivalent to flipping the bits in the range $$$[k + 1, lsb(x))$$$ of the binary representation of $$$x$$$.

Observations
Optimal strategy for making two arbitrary integers equal
Finding the two integers which require the maximum number of moves to equalize

Implementation: link

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

Problem C can also be solved in O(n) approach which is bit easier to understand than one provided in the editorial.What we need to do is maintain a cnt array.We will traverse the array and for each element we will find the maximum remainder that number can leave this is O(1) operation.The maximum remainder will either obtained on v[i]/2 or v[i]/2 +1.If the remainder is greater than n do cnt[n]++ else do cnt[rem]++.If a number is already within the range 1 to n then we will skip its first occurence and for the remaining occurences we will proceed as stated above.Now we will traverse the cnt array from n to 1 and we will initialize a var curr_cnt=0 and we will add cnt[i] value to curr_cnt and if curr_cnt <=0 at any instant we will return -1 else we will decrease curr_cnt by 1 for that index.To output the min number of operations required we will just count the numbers greater than n or the number which are between 1 to n and have multiple occurences so we wont count its first occurence and will add other occurences.This approach works in O(n)

Solution Link : https://mirror.codeforces.com/contest/1617/submission/244048117