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

Автор 127.0.0.1, история, 7 месяцев назад, По-русски

Спасибо за участие!

Tutorial is loading...
Tutorial is loading...
Tutorial is loading...
Tutorial is loading...
Tutorial is loading...
Tutorial is loading...
Разбор задач Codeforces Round 907 (Div. 2)
  • Проголосовать: нравится
  • +116
  • Проголосовать: не нравится

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

Thanks for the fast editorial!

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

    I am having a little problem in D. Its working on nearly all the test cases and logic is to point. But I think there is some problem with modulus and its giving wrong answer on one test case-v 179 1000000000000000000 Can any body help I cant seem to figure it our. This is my code where maxi is modulus ll l,r; cin>>l>>r;

    ll te=l; ll ans=0; while(te<=r) { ll p=log2(te); ll up; // if(p==63) // up=r; // else up=min((ll)(pow(2,p+1)-1LL),r); //cout<<up<<endl; ll ct=0; ll x=1;

    while(x*p<=te) { x*=p; ++ct; } // cout<<te<<" "<<x<<endl; while(true) { ll nx; //cout<<x*p<<e ndl; x*=p;nx=min(x,up+1); ll nxm=nx%maxi; ll tem=te%maxi; ans=(ans+(ct*((nx-te)%maxi))%maxi)%maxi; if(nx>up) break; ct=(ct+1)%maxi; te=nx; } if(up==r) break; te=up+1;

    } cout<<ans<<endl;

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

Why the approach for F with euler tour+Lazy prop is giving tle on tc 21? here is the code-https://codeforces.com/contest/1891/submission/230589277

any help will be appreciated.

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

I came up with the author's solution F, but I didn't have enough time to debug((

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

Как автор задачи E, мне жаль, что E и F были не в том порядке.

У вас задачи не в том порядке разложены

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

F can be solved without reversing the queries. It is offline though.

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

    It would be online if the final tree was known beforehand. Otherwise — yes, the online solution would be quite nasty with maybe some link-cut trees or treaps.

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

    What do you mean by reversing the queries? I just run on the queries and update to 0 when adding a node

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

What does the "transition" mean in D?

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

For the B problem what i did was that i just added condition that any element in x should be taken one time but according to the editorial this condition can fail in some cases.So is my code correct https://codeforces.com/contest/1891/submission/230580104

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

    But still you can have at most 30 distinct operations which can include the useless ones but it won't change the array and time complexity remains linear, so it works.

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

achha contest

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

nice round for a beginner like me!!

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

Прощу прощения, можно ли найти где-то авторский код?

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

In C problem I did as proposed in editorial, but in one test case answers differ. Here is sequence of 14 hits from my implementation:

[1, 1, 2, 5, 6, 6]
=1h small stack=1 0/6
=2h small stack=1 1/6
=4h small stack=2 2/6
=6h big stack=5 4/6
crushing 6/6
=7h -> [3, 6] combo=0
[3, 6]
=10h small stack=3 0/6
crushing 3/6
=11h -> [3] combo=0
1 stack with 3 left. hit by 1
[3]=14h

Can someone provide a sequence to win with just 13 hits?

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

    On the final stack of 6 use the combo at the end (2 small attacks (4) -> combo(-1)) instead of doing combo(3) -> 3 small attacks(0).

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

    If you want to stick to this approach, try using std::deque, erase() from the beginning of vector is expensive operation. Or take a look how beautifully contest leaders solved it.

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

Here is an alternative solution for F, using Fenwick Tree.

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

    Same, I think this is more direct.

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

    What's the logic?

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

      I believe that my solution 230576374 is the same as in this comment, so I'll describe it.
      Let's build our tree and for each vertex save its creation time and updates with current time and value.
      What is answer for some vertex? It's sum of all requests which were made on this vertex or any of parents LATER than creation time of current vertex. So let's create BIT for sum of requests by time and dfs our tree. We perform updates before getting ans and rollback them before dfs exit thus for each vertex only relevant updates remain:

      dfs(u, p):
          for (time, value) in updates[u]:
              bit.update(time, value)
          ans[u] = bit.get(createdAt[u], n)
          for (int v: g[u]): if v != p:
              dfs(v, u)
          for (time, value) in updates[u]:
              bit.update(time, -value)
      

      Each update is made exactly twice, so it's $$$O((n + q) \log(n))$$$

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

        Thanks for the explanation! Very creative solution. I like that you no longer need range updates, only point updates and range queries.

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

What was the reasoning for putting problem F at that position?

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

Anyone have an answer for D in python?

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

This is probably the easiest F I've ever seen :(

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

C can be implemented not using two pointers. But during the contest i forgot to check if n == 1 and a[i] == 1 :\

void solve() {
    scanf("%lld", &n);
    int s = 0;
    for (int i = 1; i <= n; i ++) {
        scanf("%lld", &a[i]);
        s += a[i];
    }
    if (n == 1 && a[1] == 1) {
        puts("1");
        return;
    }
    int sp = s / 2;
    sort(a + 1, a + 1 + n);
    int ss = 0, cnt = 0;
    for (int i = n; i >= 1; i --) {
        ss += a[i];
        cnt ++;
        if (ss >= sp){
            break;
        }
    }
    printf("%lld\n", cnt + s - s / 2);
}
»
7 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

I have a problem on C . In 230619057 the code id accepted , but in 230619275 , the code is wrong . The only difference between them is merely in "lower_bound(pres,prew+n+1)" or "lower_bound(pres+1,pres+n+1)" . But the pres is the prefix sum of a which indicates that the sum divided by 2 (floor,except for n = 1) must be positive . So "+1" should not make a difference to my solution . I am quite confused . Please help we .

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

    I reverse the order , sorry . The former one is wrong , while the latter one is correct .

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

Can someone please check out why my submission for Problem D is giving TLE?

Code

Approach: Lets say $$$y = \log_{\log_2(x)}(x)$$$ then the value will remain same till $$$tempR = \min(R, 2^{\log_2(x)+1}-1, \log_2(x)^{y+1}-1)$$$. So I will keep updating answer as $$$ answer += y \cdot (tempR - x + 1)$$$ $$$x = R + 1$$$.

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

I think swap E and F is a good idea

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

Can someone please tell me why is my submission for Problem D giving TLE?

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

    You recalculate intervals every time you run "func" function. Doing it once and storing it somewhere could help. My solution working as I said: 230684869

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

      Yeah, I got that later. Even this solution is correct if I directly calculate from L to R rather 1 to R and 1 to L.

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

This round was too easy, though people still couldn't solve problems, I don't know why. I managed to solve D in time and saw my rank go way up. A handful of 20 minutes was still left for the contest but I convinced myself I wouldn't be able to solve E. I saw E later after the contest ended and it was the easiest Division 2 E I've ever seen.

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

Mathforces

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

    Nope

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

why is E is much difficult than F. Or why is F much easier than E.

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

Maybe the simplest implementation for C:

sort(a+1,a+1+n);
for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i];
int tmp=(sum[n]+1)/2;
int c=0;
for(int i=1;i<=n;i++) if(sum[i]>tmp) c++;
printf("%lld\n",tmp+c);

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

    can you explain the reason behind this approach?

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

    Please explain your solution!

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

      Lets call $$$A$$$ = total number of monsters.
      Suppose we make $$$s = ceil(A/2)$$$ moves of type-1 (killing single monsters). Then at the end we will have accumulated total power of $$$(A - s)$$$. This much power is certainly enough to kill all the remaining hordes of monsters, no matter what they might be. Making more than $$$s$$$ moves of type-1 is certainly wasteful.

      Now, it only remains to use the accumulated power, intelligently. Which is simply to kill the biggest hoardes. (since cost of killing small hordes is also $$$1$$$.)

      (Also, making lesser than $$$s$$$ moves of type-1, cannot lead to a better answer, atleast not in a single step. And if we do multiple rounds, like some recursive solution that could lead to a better solution, then the values could be simply added to the initial answer straightaway. So, there is no-real benefit of doing multiple rounds.)

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

can anyone explain why the greedy solution works in C? also for the case when i==j and the last number is an odd number and x=0, then there is no way we can use the 2nd method on this horde

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

    It's possible to use 2nd method when there is only 1 horde left with odd size and x = 0.

    For example left horde size = 7 and x = 0 Use 3 attacks of first type. After that horde size = 4 and x = 3. Use second type (ultimate) attack. After that horde size = 1 and x = 0. Use 1 attack of first type. After that horde size = 0.

    So it takes 5 attacks to destroy horde size including second attack. Without second attack it would take 7 attacks.

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

      thanks, and it was my bad, I took the 2nd method as it can be used only when there are exactly x monsters left in a horde :-(

      it's also clear now why the greedy solution works

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

I came up with using offline query in problem F. My idea is first save the query and build the completed tree which is presented in the end. Then, I just need to loop from q to 1 and update normally using Euler's tour when type 2 is meet otherwise if type 1 is the current query, output it's node value. But unfortunately, I got WA immediately at 2nd test case although this idea is kind of nature (or maybe it's wrong in some case), anyone suggests me why am i wrong here?

My submissions: 230648660

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

can anyone help in f...getting wa on 2..230657380

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

How the total complexity for problem c is O(nlogn) ,

it should be O(n) .

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

#

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

Can someone give a simple idea about F? Also may I know what are the prerequisites to learn to solve problem F?

  • »
    »
    7 месяцев назад, # ^ |
      Проголосовать: нравится +19 Проголосовать: не нравится
    1. Queries are offline, you already know how your tree will look like
    2. Can you solve this problem if first queries are always making the tree and other queries are adding (I mean, try solve this: you have a tree and $$$q$$$ queries add some $$$value$$$ on subtree, how solve this?)
    • »
      »
      »
      7 месяцев назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Thank you :)

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

      I guess there are multiple ways of doing the 2. one you have mentioned. Can you suggest which method is good to opt.

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

        You can do $$$dfs$$$ and go down from root to leafes.

        If in node $$$x$$$ you get some sum from above, you also get same sum into all nodes in $$$x$$$ subtree.

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

    Prerequisites: "offline" approach, DFS pre-order, fenwick tree (range add/point get interpretation)

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

Is there any online solution for F?

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

In problem D

and on each segment there are at most O(logn) transitions

shouldnt there be like at most 2 transitions per segment because if we make 3 transitions that would mean jump to next segment?

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

My logic is similar to one in editorial but I am having issues with MOD. What changes should be done in my code ?

https://codeforces.com/contest/1891/submission/230655160

Also what are some good sources for topics like modular arithmetic and other topics that will help me remain stable expert. Thanks

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

Hi Codeforces, this was my second ever contest and this time i was able to solve problem A my submission: 230544275 i found this to be interesting because it was difficult for me to comprehend what the question was asking, then i just read the problem and analyzed the sample testcases for about 15-20 mins, I found that if the index that is not sorted (a[i]>a[i+1]) lies in the powers of 2(0,1,3,7,15) then it is possible to sort it otherwise not, I just implemented this and got it through. I was elated after the first submission passed the pretests so my confidence boosted for the second problem, I just implemented a brute force solution 230561923 and it passed the sample cases so I decided to submit it, Obviously it gave a TLE at pretest 3 but overall it was a great experience, looking forward to solving more and growing. Please if possible, share your helpful feedbacks on my solutions. happy coding!!

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

For problem C I kept on overthinking that the solution would involve DP, however I did notice that the constraints on $$$x$$$ was too big and that it would most probably lead to TLE. However, can anyone think if DP is feasible for problem C if $$$x$$$ was actually some small number?

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

Out of curiosity following problem F , how will this problem be solved? Initially i have only one vertex which is numbered 1.There are 1e5 qeuries where in one type of query i can add a vertex to the tree with number sz+1 (sz is the no of nodes in the tree currently).Can i answer other type of query where i need to tell the size of subtree rooted at a given vertex in logn time or what will be the most optimized algorithm for this.

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

For Problem B, I wrote my code on Python, and I am getting correct answers when I run it on my system, but wrong answers when I run on CF. Here is my code — https://codeforces.com/contest/1891/submission/230716694

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

I understood the editorial algorithm for C, but can someone help me with why the greedy algorithm is correct? I am unable to prove it. Thanks alot!

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

PROBLEM D

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

Here is the implementation of sqrt decomposition for F. It is giving TLE as warned by author. Any optimisation in provided code is welcomed.

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

For D problem can someone provide me simple explanation ? (Even its implementation is complicated even tried) https://codeforces.com/contest/1891/problem/D

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

is there a way to solve problem c with binary search

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

Can F be solved online?

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

https://codeforces.com/contest/1891/submission/230866197

can anyone help me with problem F

i cant find any error

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

https://codeforces.com/contest/1891/submission/230866197

can anyone help me with problem F? cant find any error

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

I think it is better with spoilers, and code.

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

Can someone explain the solution of problem B? I didn't understand the idea of the editorial.

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

    Hello,bro I saw your profile You have solved a good amount of questions but your rating is not increasing because you are not solving/practicing questions of 1200 — 1500 rating you are only solving questions of below 1000 rating

    use this website https://clist.by/problems/?resource=1 for codeforces question and try to solve more than 1200 rating questions :-) Thank You

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

Thank you, 127.0.0.1

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

127.0.0.1 I am having a little problem in D. Its working on nearly all the test cases and logic is to point. But I think there is some problem with modulus and its giving wrong answer on one test case-v 179 1000000000000000000 Can any body help I cant seem to figure it our. This is my code where maxi is modulus ll l,r; cin>>l>>r;

ll te=l;
 ll ans=0;
 while(te<=r)
 {
    ll p=log2(te);
    ll up;
    // if(p==63)
    // up=r;
    // else
    up=min((ll)(pow(2,p+1)-1LL),r);
    //cout<<up<<endl;
    ll ct=0;
    ll x=1;

   while(x*p<=te)
   {
      x*=p;
      ++ct;
   }
  // cout<<te<<" "<<x<<endl;
   while(true)
   {
    ll nx;
    //cout<<x*p<<e ndl;
    x*=p;nx=min(x,up+1);
    ll nxm=nx%maxi;
    ll  tem=te%maxi;
     ans=(ans+(ct*((nx-te)%maxi))%maxi)%maxi;
     if(nx>up)
     break;
     ct=(ct+1)%maxi;
      te=nx;
   }
   if(up==r)
   break;
   te=up+1;



 }
 cout<<ans<<endl;
»
6 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

https://codeforces.com/contest/1891/submission/231287946[submission:231287946] why i am getting tle in this approach can anyone pls help

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

can someone explain for me more about how to solve problem D , please ?

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

in problem b i have brute forces just first 100 element and i got ac why thats true?

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

can someone help me,i am getting WA on test 2 of F https://codeforces.com/contest/1891/submission/232563023

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

Did anyone try (probably the dumbest) solution to F by reversing queries and doing segtree with range updates on the euler tour of the final tree? That's the first thing that comes to mind

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

I have a problem in D. I got a wrong anwer on test 8, and I have trouble finding where I went wrong. My submission is Your text to link here... . Can someone help me figure out what the problem is? Thanks a lot if you can help!

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

    I am having the same issue, failed on the same test case. Did you manage to figure it out? if so, what was the issue?

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

Can anyone please tell me if the error is in the steps of modular operations or in the map in the following solution. It would be a big help. My submission for Problem D

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

I am quite stuck on the 1891D task. I have checked the solution explanation, and I can't figure out one key element. The explanation says, that on each part with f(i)==f(i+1) we will have at max O(logn) transitions, such that g(i)!=g(i+1).
My question: how can g(i)!=g(i+1) be on the segment where f(i)==f(i+1), when f(x)=log2(x), while g(x) = logf(x)x, which means that it's base is bigger than 2, and that it should change its values significantly more rare that log2(x).

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

Helpfull

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

In Problem C, can someone explain why we are taking the attack iteratively rather than the subarray smaller to the largest horde (in this case the current j pointer)? Why not distributing attacks (of type I) on the remaining hordes beneficial since we can keep the largest hordes larger? and also, why are we minimizing the attacks of type II, wouldn't they be more effective if use them when the combo is higher than 1?