MikeMirzayanov's blog

By MikeMirzayanov, history, 4 weeks ago, In English,

Welcome to 2017-2018 ACM-ICPC, NEERC, Southern Subregional Contest, qualification stage (Online Mirror, ACM-ICPC Rules, Teams Preferred).

The contest was held yesterday on September 17. Mostly it is focused on the participants of the Div 2.

Note that you can print PDF (English or Russian) with the statements. It will be available on the contest dashboard page on the right.

Good luck!

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

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

Hope it will be rated

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

Codeforces is on fire, two days ago MemSql, yesterday Technocup, today neerc and tomorrow one div2 contest!

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

Is it rated?

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

I wonder if rated?

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

Why doesnt you add this kind of Contest to a Programmers Contest log...Please add this feature adding Educational Round and Other contests in a programmers Contest log

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

How to solve J, L?

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

    J can be solved by binary search on the answer and using max flow to check if it can be done.

    For L, notice that in a valid tree, there is an edge between nodes a and b if and only if the sum of the size of a's set containing b and the size of b's set containing a is equal to n. Then once we have all the pairs which must be edges, we check if it forms a valid tree.

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

      Nice solution for L :) I used a different, not so beautiful idea: we can find arbitrary leaf of the tree (and its parent) by looking for set of size 1. After that we can add the edge that we found to the answer and remove given leaf from the tree, moving to the equivalent problem for smaller graph.

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

    J: Binary search the answer. Suppose we have to check if each student can send no more than k gifts. Create a flow with a source s, a sink t, m vertices represent a student pair (pi mean i-th pair) and n vertices on the right (stui mean i-th student). For pair i, create edge (s, pi, 1) and two edges (pi, stuxi, 1), (pi, stuyi, 1). For student i, create edge (stdi, t, min(degi, k)) with degi mean the number of student pair that has student i. Run Dinic max flow algorithm (which work in O() due to Karzanov theorem) and check if max flow equal to m.

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

    There's a O(m^2) solution for J without binary search.

    http://catalog.lib.kyushu-u.ac.jp/handle/2324/14869/IJFCS-revision.pdf

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

      Exactly! A quick Google search for "orient undirected graph minimize out degree" finds this paper.

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

In which site can we find the official rank list(not the mirror)?

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

How to solve D?

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

    First observation. Let's wait only in the start point. Now to eat the i-th food the dog need to start in any moment from
    [t_i — i, T — i -1].

    Now we need just count the intersection of maximum number of segments.

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

      Why is it allowed to wait in the start point?

      The statement says: "After the show starts the dog immediately begins to run to the right to the first bowl."

      Am I missing something?

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

        see if we start at moment zero and wait at some place then it will be more logical to spend that time in the beginning as it may happen that because of this waiting some food(on the way to that food for which we are waiting) which dog was not able to eat(when he start at moment 0) but now he can eat it !

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

      can you please explain how to find intersection ?

      i have tried it but my code failed in test case 121 (:

      my approach : i have created pairs and then sort them and just iterate them with the help of two pointers.

      my code : http://codeforces.com/contest/847/submission/30774626

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

I made more than 9 submissions to B, but i keep getting time limit exceeded!! My solution is O(mn) where m is the number of strictly increasing subsequences. Any help? Some people even solved it withing 100 milliseconds :O

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

I made a video explaining my approach to problem k here https://www.youtube.com/watch?v=73s1wyykELQ&feature=youtu.be

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

A minute of advertisement and half-farewell.

Since 2012 my university (Samara U, previously Samara SAU) has been preparing two big contests in a year:

and

If you are yellow or lower, you may have a nice time solving them.

Now our subregional has an official, approved by Baylor, Qualification contest (this one). So, there won't be qualification contests from my university anymore. We will prepare only one big contest per year, so see you in April or May 2018.

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

My solution for B, has O(Nlog^2(N)). Why TLE 15? http://codeforces.com/contest/847/submission/30481489

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

Any hints for E? I think it's supposed to be easy but I'm stuck.

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

    Think about binary search.

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

    First of all, it's not that easy. The fact tourist solves it in 4 minutes doesn't make it easy for a 1800 person. Don't let the standings deceive you.

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

      While I was participating in the virtual contest, I was solving some problems solved by fewer people than E, that's why I thought E was supposed to be easy (and why I was punching myself for not getting it). Though it seems like by the end of the contest all 8 problems I solved were ultimately solved by more people than E (E being the first unsolved one in order of number of people which solved it).

      Anyway, I thought about binary search but I couldn't figure out how to answer the decision problem for a given time. To be honest, it's still not clear for me from your explanation but I'll try to go from here. Thanks.

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

    Check this problem (solution is in the editorial for CF round 200).

    343C — Read Time

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

Is there any editorial for the problems ?

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

Will there be an tutorial?

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

Any hint for Problem B? My code meet TLE on test #27

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

    You can use some data structure like binary search tree to get an O(nlgn) algorithm. In C++, you can use std::set conveniently. Just keep updating the answer queues while iterating the array. Without storing all answer queues, we can use next[] array to record the next item of the current item in the final answer queue. And we use std::set to store the last items of each queues. Then we can use upper_bound to find out the proper queue we should append the new item to.

    This is my solution: http://codeforces.com/contest/847/submission/30470282

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

      Thanks, I've just passed this problem. But It doesn't need use std::set, just use vector to score the answer sheet, it must in order actually. Using std::set will cost more when lower_bound moving the iterator.

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

    I used check for each end of segment. If current element lower than every end of segment, then create a new segment from this element.

    Did you read this? This is TL on 27th test. (submission #30470840)

    We need to save some time. Let's change our statement. If current element lower than last end of segment, then create a new segment from this element. Else we can check every existing segment. By using one check we won't waste time for useless O(n) checks. (submission #30478989)

    But yes, since our array of segment ends is sorted, we can use binary search on it.

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

In Problem H I am trying to solve this way, but got WA in test 7.

My Approach :

  1. First binary search on the list and find such 'k' from which to the last of the sequence is strictly decreasing.

  2. After that, if( list[k-1] <= list[k] ) then change list[k-1] = list[k] + 1 and add the count.

  3. Then I iterate from 0 to (k — 1) and check the condition if( list[i] >= list[i+1] ) then list[i+1] = list[i] + 1 , and add the count.

Please, could anyone tell me what am I missing?

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

How does one change a nickname here?

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

    Wait for the New Year. On the New Year user can change a handle.

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

Some hint for problem D?

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

    Greedily, the answer must happens when the dog waits at the start point for some seconds and then run&eat without waiting. So we just need to try how much time the dog waits at the start point.

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

    Optimize the trivial O(nT) DP solution.

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

How do you make sure in questions like F that there is no edge case left to consider? It just happens to me that after thinking for a hour or two about various conditions, there still remains so many conditions leading to WA. Any help is appreciated. Thanks.