ch_egor's blog

By ch_egor, 4 weeks ago, translation, In English,
Tutorial is loading...

(Developing and idea — V--gLaSsH0ldEr593--V)

Tutorial is loading...

(Developing and idea — MikeMirzayanov)

Tutorial is loading...

(Developing — _kun_, idea — jury)

Tutorial is loading...

(Developing — Sehnsucht, idea — Helen Andreeva)

Tutorial is loading...

(Developing and idea — VFeafanov)

Tutorial is loading...

(Developing and idea — Sender)

Tutorial is loading...

(Developing and idea — voidmax)

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

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

Auto comment: topic has been translated by ch_egor (original revision, translated revision, compare)

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

Thx for fast judging and editorial!

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

Good problems, interesting solutions

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

Could D be solved using Topological Sorting?

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

    Yes. I did it by Topological Sorting. My code is here 50382490

    Actually I think Topological Sorting is just implementing the same method given by the editorial.

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

      Hi! Could you please explain your code a little bit. I am interested in knowing what addEdge() function is doing and how is the while(head <= tail) loop working ? What is fe[] array for ?

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

        I am sorry to reply so late.

        For the first question, do you know what Adjacency List is? Function addedge() just adds an edge to the adjacent list of the graph, and fe[i] just denotes the index of the head of the list which contains all edges which start from vertex i.

        For the second question, do you know what BFS is? In this step I am just implementing BFS algorithm to get the topological order of this graph.

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

C is very nice!

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

Can somebody explain how to do the Concatenation of lists in O(1) for problem F?

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

How to solve problem F using dfs? Many of the people have solved it using DFS.

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

Wait. On F, I don't understand why it's enough to simply unite the sets. We are trying to put the numbers on an ordered line, so when we unite a and b does it not matter if a is to the left of b or b is to the left of a? Can we prove that it doesn't matter? The editorial doesn't actually explain the problem, it explains how to do DSU.

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

    Every time when we have to merge sets, all of kittens from one set are in one cell. If you have some order for set a and set b, you just have to ensure that this two sets are adjecent, because no matter you place them ab or ba, after i-th operation they will become one component.

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

    Assume that was putting a to the right of b is a valid solution

    Then we can split the sequence into four parts

    c — b — a — d

    c is the subsequence in front of b and d is subsequence behind a

    We can simply find another valid arrangement by reversing c , d and swap them Also swap a b

    d’ — a — b — c’

    So the order doesn’t matter

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

Is there any way to solve F using DFS

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

    I did that, but not sure if the way is what you want, since my DFS is used to travel a tree. My Submission is here, notice that array sz[] is not used and was forgotten to remove.

    Simple explanation: when we merge 2 sets, we create a new node stands for the whole set and set its two sons to that 2 sets. After all operations it will become a tree because answer always exists. Use DFS to travel this tree, and every time when we meet a leaf node just print it. It's correct because for every merge operation the 2 operands are sons of a new node and that guarantees the 2 part must be neighbors in the final output.

    Hope it helps.

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

How to solve G? I think I need more details.

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

    Let’s look on stack of increasing values of dp. Then we count the new value, we need to get the minimum element on the segment, that element should be in the stack, we can go from top and search for it. But this solution is O(m**2). Let’s notice that we can erase elements if we find reachable element earlier. So we can keep in stack only optimums. That gives us O(m).

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

didn't understand the solution of problem C, can anyone explain it to me or suggest other one ?

and what is the kind of topic he used to solve this problem ?

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

    The solution is a constructive one. Sort the sequence, and append all even-indexed elements reversely to the end of the sequence. Correctness proof is given in the editorial.

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

    I'll do my best to describe the proof in more detail:

    We have a problem that requires us to find a configuration that minimizes a value. The general approach used (which can sometimes be applied to other problems too) is the following: We prove that that there's a lower bound on how small the answer can be for a given input and then we figure out a configuration that achieves that exact lower bound.

    For this task: First, let's consider the numbers ordered such that a[i] ≤ a[i + 1]. We can then prove that the answer can't be better than ai + 2 - ai,  for any i = 1,2,3,...,n-2. ( statement 1 )

    If we manage to do that, then we can say that a lower bound for the answer is the maximum of all of those, i.e. max(ai + 2 - ai), where . The final step would be to see that the solution provided in the editorial gives that exact lower bound ( statement 2 ).

    Proof for statement 1: First imagine that you have a complete graph, where the vertices are the given heights and the edges represent the absolute differences between the two endings. In order to give a solution, we must give for every vertex a "before" neighbour and an "after" neighbour, such that we get a cycle going through all nodes exactly once (a hamiltonian cycle). Now let's prove by contradiction that the solution can't be better than ai + 1 - ai for a fixed i. Suppose that it is smaller. Since we want the maximum value of an edge to be stricly less than ai + 1 - ai, then it means we can't use any edge between a[m] and a[n], where (let this be the first set) and (let this be the second set), since a[n] - a[m] would be greater or equal to a[i + 2] - a[i]. From this, we can see that if we want to start a path from the first set that goes to the second set and then comes back, then we must use a[i + 1] at least twice. Thus, any cycle will contain a[i+1] more than once, so it can't be hamiltonian, so we can't build a correct configuration => contradiction with our initial hypothesis that there exists a solution.

    Therefore any solution can't be better than the mentioned lower bound.

    Proof for statement 2: I'll just mention the logic for the example solution given in the editorial: a1, a3, a5|a6, a4, a2. We can see that the difference between two heights in the first part or in the second is one of the those that give the lower bound. The other two are the difference in the middle and the one at the end. But we have that a[6] - a[5] < a[6] - a[4] < lowerBound and a[2] - a[1] < a[3] - a[1] < lowerBound. So the maximum of all values is less or equal to the lower bound, but since the lower bound is the lowest value, it means we get exactly that.

    Hope it helped.

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

      Dude, you are masterpiece ! thanks <3

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

      Honestly, the proof of statement 1 seems pretty nontrivial, which is why I'm surprised the problem was a Div2 C.

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

        I agree. The problem was probably a Div.2 C because of how easy it is to write the code for the solution given in the editorial. Maybe many people "eyeballed" the solution without proving it.

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

Can anybody please point out why my solution for F is exceeding time limit? Thanks in advance!

50385034

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

    You haven't initialised sze with 1.

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

      Thanks a lot for replying and solving my mistake as well.

      However do you have an idea as to why all those 7 test cases worked (the 7th testcase had a very large input file as well)... and why particularly initialising the sze array with values as 0 was causing a tle?

      Thanks a lot though!

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

        Wait I got it, no need for replying , thanks a lot! It was a pretty silly mistake by me :(

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

G: Where is the case with dropping domino to the left? Also first formula shouldn't be dp[j]=min(dp[i-1]+c[i]) for all j, that j-th domino fall if i-th was pushed to the right?

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

    I think the editorial has a typo. The first situation should be domino falls left.

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

      I think so. It had confused me for some moment until I realized there is a typo.

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

I did Problem C using Binary Search, but my implementation was too complex 50403476. Anybody who also did it using Binary Search with an easier implementation?

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

DSU contest

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

How to solve problem G by dynamic? I need more explanation.

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

actually,I can't understand D's DSU solution.how to deal with '<'ans'>'?

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

    if aij equal to "=" then dish i from the first day and dish j from the second day must be equally good, then you will realize that 2 dishes must be on the same group. When you assign all dishes to the group then you can look at '<' and '>'. So if aij equal to '<' then the group of dish i from the first day are worse than the group of dish j from the second day so that makes a graph of the group of dishes, Same as '>'. After that use DFS on that graph to find which group are the worst and which one is better and so on.

    Here is my solution : link

    PS. Sorry about my English.

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

The following is another alternative for implementing the proposed solution for problem 1131C - Birthday.

50431644

Assuming a 0-indexed array a0, a1, ..., an - 1, and an array-size parity , your valid optimal solution can be formulated as follows:

ap, ap + 2, ap + 4, ..., an - 2, an - 1, an - 3, an - 5, ..., a1 - p.

P.S. In the problem statement, I think that the word "low" should have been written as "short", and that the phrase "growth of two neighboring children" should have been written as "heights of two adjacent neighboring children".

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

Can someone explain E more thoroughly?

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

The following is another intuitive deque-based solution for problem 1131C - Birthday, pushing ordered heights at both ends of the deque in alternation until all heights are pushed to form the optimal circle with minimum height-difference between adjacent neighboring children.

50471341

P.S. This idea was developed independently. Other contestants might have used a deque as well to form the requested circle.

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

Div2 Problem B: Draw! In my local machine, I'm getting the correct output for the test case, while on cf output is different, Can anybody help me with this, Here is my code .

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

    Try your original code on your local machine by entering the input values instead of copying the test case. It will output a garbage value. Solution: Replace mp(0, 0) by construct assignment pair<int, int>(0, 0). and mp(x, y) with pair<int, int>(x, y).

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

    In the second loop, i goes up to n,

    then in this line, y = min(arr[i+1].ff,arr[i+1].ss);

    You try to access the element at arr[n+1] which is some garbage value that you did not set.

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

Next time you arrange a contest please write small stories.Too much stupid lines in a problem.This is totally annoying.

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

Can anybody help me with the number assignment process in D?

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

Can you modify the answer fo G ? I think the editorial has a typo. The first situation should be domino falls left.

Thank you very much. I think it will be very helpful.

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

can anyone help me in question F. I used DFS. https://codeforces.com/contest/1131/submission/51000532

  • »
    »
    3 days ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Try the following test case it gives a wrong sequence 10 10 6 8 10 6 2 8 7 8 4 1 7 8 5 3 10 10 9

»
3 days ago, # |
  Vote: I like it 0 Vote: I do not like it

good tutorial