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

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

A. Find Min Operations

By nishkarsh

Hint 1
Hint 2
Solution
Code

B. Brightness Begins

By nishkarsh

Hint 1
Hint 2
Solution
Code 1
Code 2

C. Bitwise Balancing

By P.V.Sekhar

Hint 1
Hint 2
Solution
Code

D. Connect the Dots

By P.V.Sekhar

Hint 1
Hint 2
Solution
Code

E. Expected Power

By nishkarsh

Hint 1
Hint 2
Solution
Code

F. Count Leaves

By nishkarsh

Hint 1
Solution
Code
  • Проголосовать: нравится
  • -357
  • Проголосовать: не нравится

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

whats the point of allowing $$$O(n \cdot 1024)$$$ solutions in E

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

Can anyone explain how did we get the direct formula in B??

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

This was a good round, unless I FST ofc, then it was a horrible round. I think that there should be more problems like this — problems that don't require so much IQ, but $$$do$$$ require coding. These problems are what might be called chill problems.

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

Now after seeing the solution of B problem.... I just want to cry ):

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

I was able to figure out that number of ON bulbs after n operations is related to sqrt(n) but was going in opposite track. Here only perfect squares are off and other are ON.

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

I understood the binary search solution for problem B. But, I am not able to figure out how direct formula $$$n = \lfloor k + \sqrt{k} +0.5 \rfloor$$$ came. Can anyone please explain it?

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

In problem B, how do we derive the formula $$$( n = \left\lfloor k + \sqrt{k} + 0.5 \right\rfloor )$$$ from the equation $$$( n - \left\lfloor \sqrt{n} \right\rfloor = k )$$$?

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

    Derivation:

    Suppose $$$\lfloor \sqrt n \rfloor = m$$$, $$$m^2 \lt n \lt (m+1)^2$$$ (note that n wouldn't be a square, as the square lightbulb itself is closed)

    So, $$$m^2-m \lt k \lt m^2+m+1, m-0.5 \lt \sqrt k \lt m+0.5$$$ (inequality is true as k is an integer)

    $$$\lfloor \sqrt k +0.5 \rfloor = m = \lfloor \sqrt n \rfloor$$$, $$$ n = k + \lfloor \sqrt k +0.5 \rfloor$$$

    Intuition:

    Suppose $$$l^2 \leq k \lt (l+1)^2$$$, we have $$$n = k+l$$$, if $$$n \geq (l+1)^2$$$, we have to add 1 to compensate for that new square. So $$$n=k+l$$$ or $$$n=k+l+1$$$

    $$$n \geq (l+1)^2 , k \geq l^2+l+1 \gt l^2+l+0.25, \sqrt k \gt l+0.5$$$

    The formula follows.

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

      I understand the derivation, but I am unsure how $$$m - 0.5 \lt \sqrt{k} \lt m + 0.5$$$ follows from the condition $$$m^2 - m \lt k \lt m^2 + m + 1$$$.

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

        $$$m^2-m \lt (m^2-m+1/4) = (m-0.5)^2 \lt k \lt (m+0.5)^2 = m^2+m+1/4 \lt m^2+m+1$$$

        As you can see, 1/4 is added for lower bound, 3/4 is removed for upper bound, so the inequality only works because k is a positive integer.

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

If maxa is sth like 2^20, E will be a good problem. What a pity.

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

A O(1) solution for C exists: if some solution exists both b ^ d and c ^ d will be solutions. This comes from simplifying the truth table.

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

In problem C simply set a to b xor d and check if it works

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

You put image of editorial C to editorial D. By accident I suppose

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

I got the idea of problem B fast because of 1909E - Multiple Lamps.

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

How was I supposed to solve that B problem, I literally had 0 idea that I will have to build a formulae for that, plus the observation required for the problem isn't normal at all.

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

    Here is how I approached it. First I assumed it to be a dumb problem. And from my past experience and noticing that n and k are not far apart in the samples, and by thinking about prime factorization and number of factors (however I didn't dive into that because I was lazy) I suspect maybe only the first few bulbs are not on. And I printed a table of the first 100 n and k, and quickly realized that k=n-(int)sqrtl(n). Obviously then you may construct some weird formula to do it backwards, but I suddenly came up with binary search and solved it.

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

    I didn't think of establishing a formula when solving this problem, but I found the following pattern by observing the case of n=24: 0110111101111110111111110 Using this rule, the problem is transformed into how many zeros need to be inserted into k ones

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

contest is too math

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

In B no need for a formula, you can just binary search for the answer, it only needs that observation

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

Can someone help me with my code for E. I am finding probability for each bit to be active or not then for all number adding it's contribution to expectation.

Code

z[i][0][j] represent prob in first i element our subset's xor will have j'th bit set

z[i][1][j] represent prob in first i element our subset's xor will not have j'th bit set

then for each number(0-1023) i add contribution number 5's contribution would be simply (z[n-1][0][0]*z[n-1][1][1]*z[n-1][2][0])*5*5

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

    Squaring is not linear so you can't handle bit by bit without doing the editorial's trick, what works is z[i][j] represents probability in first i element that the xor is equal to j

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

    At first I thought of something similar for this problem. The issue is that the probability of getting a 1 on the ith bit is not independent to the probability of getting a 1 on the jth bit. An example of this may be that given the case:

    1

    3

    5000

    I can either take the 2^0 bit and the 2^1 bit or I can take neither, yet your implementation may give some probability to 2's contribution.

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

    I had the same idea when implementing at first, but the bit-by-bit approach doesn't work because you're trying to use linearity of expectation on a non-linear operation (squaring). If you're given $$$A=[101_2]$$$ and $$$P=[0.5]$$$, then you should have a 50% chance of obtaining $$$0^2=0$$$ and a 50% chance of obtaining $$$(101_2)^2 = 25$$$. However, if you solve bit-by-bit, your solution will conclude that you have a 25% chance of obtaining $$$(000_2)^2=0$$$, a 25% for $$$(001_2)^2=1$$$, 25% for $$$(100_2)^2=16$$$, and 25% for $$$(101_2)^2=25$$$, which should be impossible since you can only xor by full numbers, not just their individual bits.

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

    Let's say you only have one element in the array, 3. I believe your solution produces a non-zero expected value for the XOR to be 1, because the 0th bit is set in 3. But a XOR value of 1 cannot be achieved.

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

The editorial solution for E is too complicated. There is a much easier O(1024 * n) dynamic programming solution which comfortably fits within time limit.

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

Why is Carrot not working !?

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

Seems like you didnt consider two much easier solutions in D and E

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

Problem D has a much easier $$$O(nd^2 + m)$$$ solution.

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

Can anyone tell me what I am doing wrong looking at my profile, I am unable to reach pupil

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

$$$O(nd+m)$$$ solution to D: 283633809 We can brute force all edges and run dfs for connected components, since there are at most $$$2*d$$$ edges per node.

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

Can anyone help me debug my code, It failed test case 8. I tried so hard today but not enough :(

Submission:283668245

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

For C, can someone explain why it is bit independent? I am unable to wrap my head around it

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

    Assume it is not bit independent. Then there must be some i, for which (a|b)'s i-th bit is not set and (a&c)'s i-th bit is set. If (a&c)'s i-th bit is set, then a's i-th bit must also be set. But if a's i-th bit is set, then (a|b)'s i-th set must also be set, which is a contradiction. Therefore it is bit independent.

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

    Subtraction in kth bit place in p - q = r affect other places only if pk is 0 and qk is 1.

    All other cases

    For this case to happen, (ak | bk) = 0 which means ak = 0
    but (ak & ck) = 1 which means ak = 1 which is a contradiction
    Hope the explanation is clear!

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

An alternative solution to the problem D in $$$O(max_d * n + m)$$$

Consider the point $$$x$$$, note that it can only be connected to the $$$max_d$$$ points that go in front of it. We will support $$$dp[x][d] = k$$$, where $$$x$$$ is the coordinate of a point on a numeric line, $$$d$$$ is the length of the reverse step, $$$k$$$ is the maximum number of steps that will be taken from point $$$x$$$ with step $$$d$$$. Then note that we can move from point $$$x - d$$$ to point $$$d$$$ only if $$$dp[x - d][d] \gt 0$$$. In this case, we will draw an undirected edge between the points $$$x - d$$$ and $$$d$$$. Recalculate the dynamics for point $$$x$$$ as follows $$$dp[x][d] = max(dp[x][d], dp[x - d][d] - 1)$$$

Dynamics base, initially for all $$$x$$$ and $$$d$$$, $$$dp[x][d] = 0$$$. Now for all m triples $$$a_i, d_i, k_i$$$ we get $$$dp[a_i][d_i] = max(dp[a_i][d_i], k_i)$$$

At the end, using dfs, we will find the number of connectivity components

Code of this solution: 283668708

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

In the editorial of F, I think it should be $$$f(p^{ik},d)$$$ instead of $$$f(p^{i}k,d)$$$

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

Where's the originality?

Problem Codeforces 976 Div2 $$$F$$$ be directly copied from AtCoder Beginner Contest 370 G link: https://atcoder.jp/contests/abc370/editorial/10906

The core idea of both problems is absolutely identical, including the approach of solving them with a convolution technique. The only noticeable difference between the two problems lies in how the function $$$f(prime)$$$ and $$$f(prime^{ki}, b)$$$ is computed. Other than that, the rest of the structure, including the logic and solution techniques, are the same. This raises concerns about originality and fair practice in problem setting across competitive programming platforms.

Problem Codeforces 976 Div2 $$$E$$$ has solution with the most basic dp idea with $$$O(n \cdot 1024)$$$.

As someone who placed officially 12-th in Div 2, I’m absolutely disappointed with how Codeforces 976 Div2 F turned out.

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

An alternate solution to D which doesn't use DP:

Similar to the solution in the editorial I used a DSU to keep track of components, but to check whether elements $$$i$$$ and $$$i+d_i$$$ are connected, I simply need to check among operations $$$j$$$ where $$$d_j = d_i$$$, and $$$a_j \% d_j = i\%d_i$$$. I used a map to store sets of operations together based on $$$d_j$$$ and $$$a_j\%d_j$$$, and I stored each operation as a pair $$$[ a_j, a_j + k_j \cdot d_j ]$$$.

Now each set of operations can now simply be represented as sets of intervals, and I used a datastructure which I called an IntervalSet which internally uses an std::set to efficiently a insert intervals in amortized $$$O(\text{log n})$$$ and store them efficiently by combining overlapping intervals and query whether an interval is completely included in the set in $$$O(\text{log n})$$$ where $$$n$$$ is the number of intervals in the set. This allows me to simply query whether $$$[i,i+d_i]$$$ is included in the among the operations with $$$d_j = d_i$$$, and $$$a_j \% d_j = i\%d_i$$$ which makes the code very simple.

void solve(){
  int n,m; cin>>n>>m;
  
  DSU dsu(n);
  
  map<pii, IntervalSet2<int>> mp;
  for_(i,0,m) {
    int a,d,k; cin>>a>>d>>k;
    a--;
    mp[{d,a%d}].insert({a, a+k*d}); 
  }
  
  for_(i,0,n){
    for_(di,1,11){
      if (i+di >= n) break;
      if (mp[{di,i%di}].contains({i,i+di})) dsu.merge(i,i+di);
    }
  }
  
  auto groups = dsu.groups();
  cout<<sz(groups)<<nl;
}

My submission: 283669482

PS: I used ChatGPT to help in implementing the IntervalSet class so its not in a great state rn;) and I haven't seen any implementations of such an IntervalSet class, so I would love to learn about any other implementations you guys know about.

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

problem B solution without Binary search : solution

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

problem a can be solved by take log?

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

Although I know $$$O(1204\cdot n)$$$ is not the standard solution to E, I have encountered a strange TLE in this solution by just moving $$$M = 10^9 + 7$$$ to the inside of the $$$solve()$$$. 283686661 283686119 Could anyone tell me what's going on?

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

For E I used the dumb O(1024*n) solution but idk why I'm TLEing. For this submission 283708821 it TLE test 12 since I did dp%MOD. But for the previous submission 283708742 it passes, but I all did was changing the MOD so that it MODs the whole thing instead of the dp itself. How in the world is this not the same thing???

Pls help if anyone know the issue thx <3

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

F can also be solved using standard min_25 sieve trick: https://mirror.codeforces.com/contest/2020/submission/283749226

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

For problem C why is it giving WA on test-11?

283777193

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

in problem d can't we just make a graph with the help of dsu with the help of given nodes that we receive during input and then calculate the number of connected components?

My solution:https://mirror.codeforces.com/contest/2020/submission/283746432

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

Looking at the tutorial of problem E, it isn't clear why the contribution of pairs of bits from both operands can be added together. When we think about the multiplication, we observe that multiple pairs $$$(i,j)$$$ can affect the same bit of the result and yield a carry over. Thus, we don't know a priori if that bit will be set (with some probability) or not, but the contribution should only count when the bit is set.

However, after some consideration, I've concluded that it doesn't matter whether the bit will be set. What matters is that the contribution of all pairs will add up (in terms of expected value), just as it would in the multiplication. Please correct me if I'm wrong in this reasoning.

  • »
    »
    19 месяцев назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится 0 Проголосовать: не нравится
    You can write f(S) like this:

    Yes, it doesn't really matter whether there is carry over. It's just convenient to look at the number in base 2, that's all.

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

bro $$$E$$$ is so easy so yet so less accepted submissions , I missed out too , easiest problem in the contest if you know how to do memory optimisation in DP

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

The same solution problem B in JAVA does not work

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

In problem E, I tried O(n * 1024) and got tle, so I spent a lot of time to optimize it and did not have enough time to solve D.

And after contest finish, I knew that just need to add ios::sync_with_stdio to get AC

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

Can someone tell me how I can solve B in java? As far as I know there's no equivalent of sqrtl() in java and Math.sqrt() introduces precision errors for larger inputs.

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

Thanks for the editorial

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

The binary search in Question B is still a bit difficult to understand. For example, when k=6, both n=8 and n=9 can be calculated on a computer as diff=n-sqet(n)=6=k. So how can this issue be avoided?

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

    you have to find the smallest n satisfying n-sqrt(n) = k so in the code also when mid-sqrt(mid) >= k then r = mid and else l = mid which ensures that l will be the largest number such that l — sqrt(l) < k and r will be the smallest such that r-sqrt(r) >= k.

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

can someone explain why for A the following logic is giving WA

int n, k;
cin >> n >> k;
if(k > n || k == 1) {
    cout << n << endl;
    continue;
} 

int cnt = 0;
while(n) {
    int a = log(n)/log(k);
    n -= pow(k, a);
    cnt++;
}
cout << cnt << endl;
»
10 месяцев назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

Min_25 is too hard!!!!!!!!!!!!!!!!!!!!!!!!!

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

thanks, now i know sqrtl

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

Problem D has a much simpler solution in $$$O(m+n \cdot d)$$$ time and $$$O(n \cdot d)$$$ space.

The idea is we can simply keep a map which maps $$$d$$$ to a map having $$$a_i$$$ mapped to max possible $$$k$$$.

So we just have to iterate over the last 10 vertices at max, if for that $$$d$$$ we have $$$i-d$$$ stored in the map, we try connecting them (using DSU), and store $$$mp[d][i] = max(mp[d][i],mp[d][i-d]-1)$$$.

This passes easily in the given time constraints!

My submission: 336833210 for reference.

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

What was that D problem's editorial! naahh hell naahh! lord save me

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

Anyone has the book in B's tut because the link didn't work

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

We can also look at the proof of problem B in this way. Number of factors of a number is

d(n) = (a+1) * (b+1) * (c+1) ...

where n = p1^a1 * (p2 ^a2) * (p3^a3)..

So, when n is a perfect square, d(n) would be always (odd*odd*odd). When n is not a perfect square, it will be (odd) * (odd) *(odd+1) = odd * odd * even. This would make d(n) even always.

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

Problem B can be solved far more efficiently following the solution: 371910904

It has a time complexity of log2(log10(n)).

Square rooting gives us the number of turned off bulbs. We should additionally turn these number of bulbs on. But these additional bulbs will also have some turned off bulbs due to being perfect squares. We keep square rooting until the offset comes down to zero.