Rudro25's blog

By Rudro25, 5 weeks ago, In English

Contest link : https://codeforces.com/gym/102942

Announcement link : https://codeforces.com/blog/entry/87209

Finally, The round is over smoothly :) We hope everyone had fun and enjoyed the contest!

A. Directional Move

Tutorial
Solution
Tester Solution

B. Make All Odd

Tutorial
Solution

C. Team

Tutorial
Solution
Tester Solution

D. XOR Game

Tutorial
Solution
Tester Solution

E. Password

Tutorial
Solution
Tester Solution
Tester Solution 2

F. Offer

Tutorial
Solution
Tester Solution

-If have any more query, then please comment.

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

»
5 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

thanks for this contest and hope for more contest like this.

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

Great round. For D, if x and y have no common bits then answer is NO else YES. So this will also work

if(x & y) cout << "Yes";
else cout << "No";
  • »
    »
    5 weeks ago, # ^ |
      Vote: I like it +2 Vote: I do not like it

    this will also work!

    cout << ((a | b) == (a + b) ? "No" : "Yes") << "\n";
    
  • »
    »
    5 weeks ago, # ^ |
      Vote: I like it +1 Vote: I do not like it

    thank you for this . I came up with the same logic , but didn't know how to proceed with bit manipulations.

    So used the basic method to calculate every bit by n%2 and check whether both of them are 1 or not

    if(a%2 && b&2)
    {
    cout<<"Yes"
    return;
    else
    a=>>1;
    b=>>1;
    }
    
    • »
      »
      »
      5 weeks ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      My method is quite different then the others.First I mapped the position of each set bits in $$$a$$$ and $$$b$$$.If both $$$a$$$ and $$$b$$$ has a common position set bit then the bit is off(basic xor).Then I traverse the map and if any second value is $$$0$$$ then ans is $$$YES$$$.Otherwise $$$NO$$$.

      Spoiler
»
5 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Thanks for the round and quick editorial

»
5 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Thanks for the round waiting for the next one

»
5 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Hoping to solve upto D in div2 contest also some day. btw thanks for this contest and hope for more contest like this.

  • »
    »
    5 weeks ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    welcome sir :D i will try soon for the next one.

  • »
    »
    5 weeks ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Welcome, Sir! Hope to see you next time also

»
5 weeks ago, # |
  Vote: I like it +15 Vote: I do not like it

Nicely done, thanks for the contest!

»
5 weeks ago, # |
  Vote: I like it +4 Vote: I do not like it

E was really a good problem for learning dp, thanks for the round.

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

We can also solve E with combinatorics. Combination with repetition to be exact. Suppose the string is like, 1----5. We can place any digit from this, {1,2,3,4,5} set in increasing order in 4 place between 1 and 5.

Let, n = number of place to fill. m = size of the set. Possible ways will be (n+m-1) Choose n.

For practice: https://codeforces.com/contest/1288/problem/C

  • »
    »
    5 weeks ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    I thought on similar lines but wasn't able to get my code working as intended. I'd appreciate it if anyone out here could look into the following submission.

    Link: https://ideone.com/U8cjmP

    • »
      »
      »
      5 weeks ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      Try checking the validity of the result explicitly.

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

      The problem is with the size of your fac array which is 100005 but according to the problem n<=10^6 which makes n+k-1<=100009(and it is less than 100005).

      I changed 100005 to 100020 and it got Accepted

      • »
        »
        »
        »
        5 weeks ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        Silly me! Thank you so much!

      • »
        »
        »
        »
        5 weeks ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        are you sure about this? I submitted the same code after changing it to int fac[100020]; and still got WA at test 4. Did you change anything else?

        • »
          »
          »
          »
          »
          5 weeks ago, # ^ |
            Vote: I like it 0 Vote: I do not like it

          You are running the first for loop (inside int main function) only upto 100005, change it to 100020 too.

          • »
            »
            »
            »
            »
            »
            5 weeks ago, # ^ |
              Vote: I like it 0 Vote: I do not like it

            Of course, should have known that. Thank you very much.

  • »
    »
    5 weeks ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Thanks for the formula, I got stuck at this and couldn't find this formula. Can you please provide me an explanation or a link where this formula can be find? Thanks for the given problem too.

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

      Stars and bars

      Imagine you need to fill a sequence of integers of size $$$10$$$ using only $$$1$$$, $$$2$$$, or $$$3$$$ so that the sequence is non-decreasing. As they are non-decreasing, all $$$1$$$'s have to appear in front of all $$$2$$$'s and so on, so we don't need to care about the order of these integers and we need only the number of occurences of each $$$1$$$, $$$2$$$, and $$$3$$$. Thus, we need to find number of solution of: $$$count_1 + count_2 + count_3 = 10$$$, with $$$count_0, count_1, count_2 \geq 0$$$.

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

      Check this out: https://www.youtube.com/watch?v=4_je4mXUCGA Hope it will be helpful. I learned it from Coursera. Someone uploaded the video in YouTube too.

    • »
      »
      »
      5 weeks ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      Consider this example:

      1 — — — 6

      In this we have to fill 3 places and to fill those 3 places we have 6 elements. Now observe that we only need to choose the elements with which we want to fill the gaps. We don't need to decide the order as that is fixed.

      • »
        »
        »
        »
        5 weeks ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        I got the idea in the contest but was unable to find the formula for that. which hijibijee provided.

  • »
    »
    5 weeks ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Thancs for the formula :)...was thinking of this approach but couldn't remember the formula

  • »
    »
    5 weeks ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    I also tried to solve it with combinatorics. 105596767 This is the code it's failing test case 4. So can you help? if you find something. Thanks in advance.

»
5 weeks ago, # |
Rev. 2   Vote: I like it +6 Vote: I do not like it

Thanks for the contest, had fun doing it!

»
5 weeks ago, # |
  Vote: I like it +14 Vote: I do not like it

Please make the submissions public, or atleast the testcases. It helps a lot in debugging silly mistakes.

  • »
    »
    5 weeks ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    I already told this secondthread sir. May be he will open soon , if possible sir.

»
5 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Could anyone explain F in a more detailed way? It would be much appreciated.

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

    It's just 2 pointer approach, we can keep on increasing our right pointer while maintaining frequency and cost, until the cost becomes greater than k. At this point we can start incrementing our left pointer and decreasing the cost. The number of elements will right-left+1. Now we keep on repeating the prcoess.

    Code
»
5 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

If in problem D, we were asked to maximize the score of Bob, how will we solve it ?

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

    I think You can iterate from the highest to lowest bit, and try to set it, if possible.

»
5 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

The contest was great! Although I had come up with a similar idea as editorial, I had a hard time proving D during contest. I still can't wrap around why case 2 always is true. Could anyone please explain?

»
5 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Nice Contest..problem set was really good.

»
5 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Very nice contest! Want more! Especially thanks for the good E task.

»
5 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

The F can also be solved using the bit + binary lifting technique.

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

can you please add more test cases? bacause it is just checking with one test case and getting accepted?

so now i don't even know whether my solution is correct or not?

  • »
    »
    5 weeks ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    You have the permission to see only 1 test case, sir. May be it's the 'gym' contest rule.

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

For C, why is the following approach incorrect? Answer is at least equal to elements >=k. Now put other elements in a list and sort it. Now iterate over every element, for every a[i], use lower_bound() on k-a[i] in range [i, list.size()] to find if such element exists. If it does, mark it used and increment answer. Why does this give a WA?

Code
  • »
    »
    5 weeks ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    can you please provide the code by spoiler! no permission to see other submission :(

    • »
      »
      »
      5 weeks ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      Sure! My bad

      • »
        »
        »
        »
        5 weeks ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        Failed test case: 1 10 5 1 3 2 1 4 3 4 2 3 1

        Expected: 4 but found 6.

        May be the problem is — When you find a pos by lower_bound it can be also used before but you not checked that. may be you can use set and remove every used element then you can use lower_bound easily.

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

          Ah right, I think the problem exactly is what you pointed out, I should definitely be removing those used values from my list. Thanks! Orz

»
5 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Let's consider a variation of problem F. Now in the subsegment [l,r] instead of making the cost of all repeating elements in that subsegment zero if we were allowed to take only one of the repeating elements in that subsegment and make its cost equal to zero. Rest all the conditions remain same as mentioned in the problem F. Then can someone please provide an insight on how we could have solved it.

»
5 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Hello , Thanks for this Contest . Can you Please Update the Settings so that we can we view all the test case , My Code for F gave wrong answer on test case 3 but I cannot access that test case . Thanks .

  • »
    »
    5 weeks ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    secondthread sir told that's may be impossible sir. but you can provide your code, i can check that by using polygon which on failed (:

    • »
      »
      »
      5 weeks ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      Can you tell why my top down dp giving the memory limit exceed ??for problem E

»
5 weeks ago, # |
  Vote: I like it +1 Vote: I do not like it

We need more contests like this. Contests like today's destroy us and you pick us up. Thanks for organizing this man!

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

So, my understanding of the solution of $$$D$$$ is as follows:

If $$$a$$$ and $$$b$$$ are given such that there are no common bits between them, the answer is $$$NO$$$, because there are no 2 integers $$$1 \leq c \leq a,$$$ $$$1 \leq d \leq b$$$ s.t. their xor will be strictly greater than the xor between $$$a$$$ and $$$b$$$.

If $$$a$$$ and $$$b$$$ are given such that there are common bits between them, the answer is $$$YES$$$, because we can always find 2 integers $$$1 \leq c \leq a,$$$ $$$1 \leq d \leq b$$$ s.t. their xor will be strictly greater than the xor between $$$a$$$ and $$$b$$$.

But I don't understand why this should always be true (i.e. for 2 integers $$$a$$$ and $$$b$$$ s.t. there are common bits between them, why is it that we can always find 2 integers $$$1 \leq c \leq a,$$$ $$$1 \leq d \leq b$$$ which don't have common bits between them, s.t. their xor will always be strictly greater than the xor of $$$a$$$ and $$$b$$$), can anyone please provide a more detailed explanation of this or a proof?

Edit: deleted some erroneous stuff I thought was correct..; also, thanks a lot @doubleux, that last paragraph (especially) really made it very clear and obvious that the "strategy" for the solution of $$$D$$$ would always work.

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

    Notice, that the maximum Xor between any two numbers is always less than their sum, the maximum arising when no two bits are common.

    Thus, if no bits are common, Xor of a and b is a+b, which is maximum that you can get using numbers less than them. Therefore no pair possible in this case.

    If the do have common bits, a Xor b will be 0 at that position. Now choose c same as a, while for d, change the bit at common position as 0. This will make that bit 1 in their bitwise Xor, thus making it larger.

»
5 weeks ago, # |
  Vote: I like it +2 Vote: I do not like it

I used the same logic and approach in F but got TLE, why Python why :'-)

Problem F submission

Great tasks tho!

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

Rudro25 Can you please explain the tutorial for problem-A more clearly? It is not making any sense. [forgot to add that the problems were interesting!! ;) ]

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

Thanks

»
4 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Why I am getting WA in problem E:

106721306

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

I used the chorus property. a^b=c -> a^c=b so (c^d = (a^b)+somenum) -> (c^((a^b)+somenum)=d) And did 1<=somenum<=10. But why +10 was enough I don't understand. can open my eyes?

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

IGNORE