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

Автор KAN, 10 лет назад, По-английски

Hi Codeforces!

The Codeforces Round 397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) is going to be held tomorrow at 8:05 UTC!

This round is organized in collaboration with Hello Barcelona ACM ICPC Bootcamp 2017 and supported by Kaspersky Lab.

Over 100 students from 17 countries and more than 25 universities such as Cornell University, University College London, École Normale Supérieure, University of Tokyo, Saint-Petersburg State University and Moscow Institute of Physics and Technology gathered in Barcelona to train together for the ACM ICPC Finals.

For eight days students have been solving problems, listening to lectures, learning and making new friends. The training schedule is intense consisting of full-length practice contests, interleaved with one-day educational modules on topics we find especially important. Every contest is followed by an in-depth explanations of every problem and technique encountered in all forms.

It is hard to convey the atmosphere of the event in words. It is said, a picture is worth a thousand words and here is a selection to give you some idea of this fantastic bootcamp. You can see more pictures from the event here and here.

The round authors are Endagorion, ifsmirnov, zemen and Arterm. The round is combined for both divisions, will contain seven problems and last for three hours. Good luck!

UPD: The scoring is 500-1000-1250-2000-2500-3250-3500.

The contest is finished. We hope that you enjoyed it. Congratulations to the winners!

  • Проголосовать: нравится
  • +288
  • Проголосовать: не нравится

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

Super-Duper Unusual Time !!! I shall miss going out with my valentine but give this contest.CF contests are much better :)

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

Please change the contest time if possible.

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

Блинн, я сделал выбор, контест или же день Валентина, конечно же контест, и всем кто сделал такой же выбор, желаю удачи :)

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

Ставь ПЛЮСИК, если зашёл посмотреть сколько жирных и прыщавых неудачников, которые в жизни и не разговоривали с девушками, будут выпендриваться в комментах, что предпочли дню святого валентина контест.

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

I'm a programmar. I have no life, no valentine.

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

Well I don't have any Valentine's day plans. So I guess I will be here :D

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

Finally I'm not alone in Valentine's Day.
I am with several thounsand people doing a CF round ^_^

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

Valentine's day special ;)

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

Время выбрана не удачна

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

OK you didn't mention in the Announcement so i guess i can ask the usual question and get an answer, Is it rated???

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

    It's a Codeforces round and they are always rated unless something does not go wrong during the contest. They don't have to mention it everytime.

    • »
      »
      »
      10 лет назад, скрыть # ^ |
       
      Проголосовать: нравится -37 Проголосовать: не нравится

      Over 100 students from 17 countries and more than 25 universities such as Cornell University, University College London, École Normale Supérieure, University of Tokyo, Saint-Petersburg State University and Moscow Institute of Physics and Technology gathered in Barcelona to train together for the ACM ICPC Finals.

      this means some users might have seen the problems before...

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

Phew, finally a Valentine where I won't be alone (body pillows don't count haha) and depressed! Love you guys! :)

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

Hello,

Me and my friend both want to compete, but we're in the same house, so we have the same IP.

Will we get banned, or is it allowed for two people to compete, even though they share the same IP address?

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

Bullet for my valentine...:)

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

Never steal anyone's girlfriend (code)

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

CF is my girlfriend,i love cf~~~~

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

A codefoces a day keeps the girlfriend away. :)

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

Contest for my valentine :p :D

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

See, everyone's talking about girlfriends and not boyfriends...

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

Feels bad when the contest starts 15 minutes before all of your lectures ends :/

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

cf is my wife :) <3

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

Not a good time for Indian college students. In between the second half classes.

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

I ran away from school lessons to write contest. Hope that is not in vain :)

»
10 лет назад, скрыть # |
 
Проголосовать: нравится +30 Проголосовать: не нравится
  • one more unfunny joke about girlfriend and cf contest *
»
10 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится +4 Проголосовать: не нравится

Expect stories about Valentine in statements :D

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

Sorry to ask it but I didn't find the answer! Is it rated?!

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

Each and every contest, I hope of learning new ideas of problem solving, though I feel bad when I end up solving nothing in the contest; hoping today that changes I think it's going to be exciting

All the best everyone, and thank you codeforces

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

You could see predicted rating changes on my service.

Вы можете узнать предсказание изменения рейтинга на моем сайте.

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

multiple 502 Bad Gateway issues when trying to submit solutions really screwed my time penalty :/

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

This contest in a nutshell:

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

Admins be like: it's not fair some contestants have fast internet connection while the others have slow one, so let's make CF slow for everyone

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

weakest pretests ever

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

Does anyone know what was pretest 10 of E?

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

How to solve D?
For problem F I was trying to solve it by Mo's algo but kept getting RE on pretest 3. Can problem F be solved by Mo's Algo?

  • »
    »
    10 лет назад, скрыть # ^ |
    ← Rev. 2  
    Проголосовать: нравится 0 Проголосовать: не нравится

    The O((n+q) sqrt(n) log(n)) algorithm using Mo's algorithm is too slow. Optimizing it to O((n+q) sqrt(n)) should be fast enough, but I don't know if that is possible. I solved F with a O(n log(n+q) log(10^9)) algorithm.

  • »
    »
    10 лет назад, скрыть # ^ |
     
    Проголосовать: нравится +4 Проголосовать: не нравится
    • If h(x)=y => g(h(x))=g(y)=x.
    • If g(x)=y => h(g(x))=h(y)=f(x), and from the last relation we get g(f(x))=y=g(x).
    • Build an undirected graph where there is an edge between x and f(x).
    • From second relation we can deduce that if there is an edge between x and y, then g(x)=g(y). We can also deduce that a path between two nodes either doesn't exist or is of lenght less then 2.
    • For the p-th connected component set g[v]=p for all v, where v is a vertex from the component, and set h[p]=f[v]. f[v] will be the same for all the vertexes as proven before.

    Code

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

I believe most G including mine will fail. For example try 11, 13, 17, ... (all primes except for 2, 3, 5).

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

    All three accepted solutions for G failed with this case:

    0000000000000000000000000000000000000000
    20
    5 1
    7 1
    11 1
    13 1
    17 1
    19 1
    23 1
    29 1
    31 1
    37 1
    41 1
    43 1
    47 1
    53 1
    59 1
    61 1
    67 1
    71 1
    73 1
    79 1
    

    Can the judge's solution handle this?

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

      What is the answer for this case?

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

      I've been waiting for a couple of hours to see: 1) what is the official solution to the problem 2) whether it works on this test case or not Why isn't anybody answering? My guess is that your comment hasn't been seen yet and might not be seen at all.

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

      I'm sorry to admit that all of our solutions time-out on this case as well.

      We misjudged 2, 3, 5, 7, ... as the hardest case for the small-prime part of the solution. In fact, including 2 greatly reduces the number of reachable masks. If we knew about the truly hardest case, we would probably reduce limitations on m to 25 or 30.

      We offer our apologies to the contestants who saw this case through and didn't submit a solution because of this. Still, we tend to think that this issue, as critical as it is, shouldn't make the round unrated since the number of affected competitors was comparably small. The tests were weak, but they were all correct.

      This mistake is a good lesson for all of us to be conscientious when preparing problems.

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

        Do you think the problem is still solvable by modifying your solutions under the given constraints?

        If yes, this is not a big deal (the problem is just about weak tests and it sometimes happens). The round should be rated for sure.

        If no, it means the problem is incorrect, and the round should be unrated.

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

        I think more importantly, problem writers should always have a proof/argument that a solution is correct, or at least a concrete bound on the worst-case runtime which is close to the allowed time-limit.

        Having weak tests or unoriginal problems is one thing, but having incorrect author solution (and what currently seems to be an essentially unsolvable problem) is a completely different issue.

        My hope is that not only you guys, but all problemsetters on CF can learn a lesson from this incident.

        As for myself, I am glad that I started on problem G but testing my solution gave major TLE on the primes from 3 to 37, I ended up not submitting anything and just going to sleep.

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

          I totally agree. However, when it is about tests that meet a particular format (like the masks obtained in this case), it is enough to prove that the solution is alright by simply testing the worst cases (and I think that's what they wanted to do). The big problem was that they didn't prove that the worst case was the above mentioned. Anyway, generally, solution must have a practical or theoretical proof that they work properly all the time (and this practical proof was incomplete). I really liked the problem and had the right idea and got TLE on the last test. I hope that, in the eventually that no solution is found, they will make the right decision to make this contest unrated. Even if they do not, I enjoyed the contest and the ideas, but the big problem was the intention that authors had to increase |S| as much as possible which I think wasn't needed to make the problem interesting.

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

        Just curious, is there a significantly easier solution when let's say |s| <= 20? That's pretty easy to bound, but was wondering what solutions you were trying to prevent by setting |s| to be larger.

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

        I think that this situation is a result of two mistakes:

        1) It seems you set constraints based on "experimental worst case running time". I don't like when there is no specific reasonable bound on running time and constraints are set so high because it seems running time is in fact better because "we will not reach many states because blah blah". IMO mistake was not "not finding worst case test", it was not bounding running time in other terms than "worst time on tests we invented".

        2) I really like following rule "set constraints as low as possible so that you are sure no unwanted solutions pass". What were you trying to achieve setting constraints so high? Cutting off 2^m solutions which don't use any weird heuristics? I think additional heuristics is not what makes solution valuable and that this was not worth distinguishing. If goal was to not allow 2^m memory then 40 is still unnecessarily high.

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

Can problem F be solved by MO's algorithm ?
I had an idea but didn't have enough time to implement it

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

Can someone please tell how to solve D ???

  • »
    »
    10 лет назад, скрыть # ^ |
    ← Rev. 3  
    Проголосовать: нравится +14 Проголосовать: не нравится

    It can be seen that for any x in [m] h(x) is a fixed point of f, and that all h(x) are unique (otherwise the first equation cannot be satisfied). Let's make m equal to the number of fixpoints of f, and h(x) = x'th fixpoint. Obviously, for any x that is a fixpoint both equations are correct. If we take x that isn't a fixpoint, then f(x) must be a fixpoint in order to satisfy the second equation. If it isn't, or m = 0, then answer is -1.

  • »
    »
    10 лет назад, скрыть # ^ |
    ← Rev. 4  
    Проголосовать: нравится +4 Проголосовать: не нравится

    1) Given h(g(x)) = f(x), as x is in [n] and same is for h(x): h(g(h(x))) = f(h(x)) -(1)

    2) Given g(h(x)) = x, using this in eq 1, h(x) = f(h(x)) -(2)

    3) For some i, f(i) = ai Comparing with eq 2, i = h(x) ai = h(x) Hence, ai = i Basically, m would be the count of such numbers such that f(i) = i. This will easily help us in calculating h(x). Example, say this holds for indices 2,4 and 7. So m=3 and h[1] = 2 h[2] = 4 h[3] = 7

    4) Now, using h(g(x)) = f(x), g(x) can be calculated. h inverse can be stored in an array. While calculating g(x), if h inverse (from the calculated h inverse array) is 0, there is no corresponding value of g(x) that satisfies the equation and hence solution does not exist.

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

slow connection vs I_love_Tanya_Romanova :(

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

What is expected solution of F?

My Mo's algorithm(NsqrtNlogN) gave TLE on pretest 7.

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

Round 397 for hacks :"D

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

Most silliest problem A ever :D

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

I happened to have discussed with darry140 about problem F beforehand, and he came up with an O(NlogNlogC + QlogN) solution, though I never implemented it.

http://tioj.infor.org/problems/1905 (Chinese)

Unfortunately coding complexity exceeded for me.

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

Hacking party :)

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

My idea for E was to find the centroid, then recursively solve from it. It failed in test 3, but I think it is due to implementation error. Could anyone verify if the idea itself is correct, though?

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

How to solve D?

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

In Problem E, why the answer of the first sample is 3? Why can't we fold again to make a path of length 2?

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

What was the intended time complexity for F? My (where M = 109) solution got TLE in system tests as well as most of the other solutions that passed the pretests. IMO there is no point in not including the maxtest in pretests for problems like this.

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

    +1

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

    My got TLE on pretests (as I expected), so there were some big tests. However it seems there were no biggest ones or pesimistic ones in some sense what can also be deduced from ratio of AC on pretests / AC on systests, which I really don't like, so fully +1 to this post.

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

    My O(MsqrtN) just got TL 22.

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

    Now I got AC in 2401ms after adding one if-statement that should optimize the constant factor. 24669254

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

    Intended complexity for F was in fact , which, in fact, does not differ from yours much (the editorial will be published soon). However, my model solution works in 600 ms on each case, and the another jury solution with dynamic segment tree ( fits into 2 seconds as well. So we decided to set the TL to 3 seconds trying to block solutions from passing and having in mind that any reasonable implementation of a segment tree will pass.

    More, I decided not to include a "pessimistic" test to pretests. There were some random tests with n up to 30000 and a maxtest, in which, however, all queries were short. This was mainly done to check not for TL but for mistyped \texttt{maxn}. As far as I see, most of incorrect -ish solutions failed on a special tests constructed against these kind of solutions, and none of these tests were included in pretests intentionally.

    I apologize to everyone whose asymptotically correct solution didn't pass final tests because of this. Maybe it would be a good recommendation to run your solution via a custom test before submitting; hopefully, it is usually not that hard to generate a maxtest for a range query problem, and doing so saved me from TL several times.

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

      Time limit is set in a way that it's unclear whether solution should pass or not. Maybe you didn't even consider such solutions? Or what was the intention? For example, mine gets to test 22 and I believe it will pass with some optimizations.

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

      If there is a variety of possible complexities to a problem like , , , etc etc than I think one should always include maxtests. I think that it is not cool to make a raffle who gets AC among people who don't have optimal complexity and let many solutions pass on pretests and let them TLE on systests only. I don't see any profit of not including maxtests other than being able to say "Haha, we are problemsetters and you naive contestant thought that n sqrt(n) log n will pass because you passed pretests, but we are smarter than you and include maxtest in systests only". I think it should be transparent whether submitted solution works fast enough on maxtests, otherwise we randomize results.

      Btw, very nice problem :).

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

        I don't agree. Those with suboptimal complexity can and should check themselves how their solution works on maxtests designed especially against their solution. I think there should be a test with maximum possible value of N to check array sizes and to fail quadratic solutions (those people shouldn't be able to lock a problem and see correct solutions because maybe it's their second account and they want to cheat).

        Getting AC with almost good complexity isn't a raffle — it just depends on the speed of your code. It's up to you to implement it well. Adding strong pretests won't help make your code faster. It can only tell you "your code is too slow, you should make it faster" what you should be be aware and afraid of at the moment you're starting coding.

        And by the way I also don't like situations with several similar complexities. There always will be some participants that will be close to TL from some side what adds randomization (it isn't a raffle though).

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

      Question for problem setters on CodeForces, TopCoder, AtCoder, etc: Is there a standard on these sites about setting the time limits? (whether it be an actual rule or just a guideline). I only have experience writing problems/judging for ICPC in a couple regions, and in those, there is no definitive rule, just a general rule of thumb: the time limit is set to >3-5x the slowest solution that is the intended algorithm without heuristic optimizations (this includes the slowest Java solution for ICPC, which sometimes makes the time limit large...), and any solution that is deemed "too slow" via complexity analysis should have a runtime of at least 2x the time limit given a reasonable amount of optimization to the code (e.g., fast I/O, simple heuristics that don't change the time complexity--like break'ing loops early, etc.).

      Is there anything similar for these sites? I know that on Polygon, they warn when a program marked TLE is within 2x the time limit or an AC solution is more than 1/2x the time limit, so maybe those are the constraints?

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

      Where is the editorial?!

»
10 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится +3 Проголосовать: не нравится

can anyone explain problem c ?

  • »
    »
    10 лет назад, скрыть # ^ |
    ← Rev. 5  
    Проголосовать: нравится +10 Проголосовать: не нравится

    Lets assume that a is less than b. If it's not, we just swap them.

    The answer is -1 if (a < k) and (b isn't divisible by k). Why? Because player A can't win (he has a<k points) and after player B won as much as he could (he won exactly b/k times), he is left with (b mod k) points. And both players don't have enough points to end game.

    Otherwise, answer is (a/k) + (b/k).

    Let player A win first round with score k, and player B with score (b mod k). Than let player B win with score k and player A with score (a mod k).

    Let's call scores after second round as A2 and B2. A2 and B2 are divisible by k. This is so because we subtracted (a mod k) and k from a, same for b. So the answer is 1 + 1 + A2/k + B2/k = a/k + b/k.

    Ask if something isn't clear to you :)

    Upd2: here is table for k = 3!

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

      "And both players don't have enough points to end game"
      That's the part that's not clear to me. If k=137, a=138, b=136 why is answer -1?

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

        See that a>k and b<k, so we can assume that a won a set, and b did not win any for sure.

        But if that was the case, the game should have ended on the 137 th (k-th) point, but a is 138 (a>k), thats why it's impossible to have a game like that.

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

    The key point is :there exists optimal solution in which the number of non K: 0/0: K sets  < 3

    Why? Because if there exist  >  = 3 non K: 0 / 0: K sets, then at least 2 of them, denoted as S1 = K: a, S2 = K: b, must be won by the same player, and we can rearrange S1, S2 to S1 = K: (a + b)%K, S2 = K: 0, [S3 = 0: K] which is no worse than previous solution with reduced number of non K: 0 / 0: K sets.

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

Where can I find more problems like C?

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

Does O(n.sqrtn.lgn) works for F?

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

Why can't I submit now given that system test is already over?

»
10 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится +23 Проголосовать: не нравится

When will you open this round for practice?

»
10 лет назад, скрыть # |
← Rev. 3  
Проголосовать: нравится +5 Проголосовать: не нравится

Why my solution for F using kd-tree in O(nsqrt(n)) but got TLE?

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

Let's congratulate Merkurev. He won contest and became Legendary grandmaster.

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

What is the best way of solving F? I'm thinking segment trees for some weird reason.

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

WTF!!

I got TLE for O( n log(n) ) solution for problem E, 24663759

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

Where can we find editorial?

Btw, any ideas to solve problem F fast? The time limit is so tight for me.

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

Hey guys, have a way to show only div2 on standings? Because i maked a sheet with my positions on each contest.

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

I cant understand the impossible case for problem C . Can anyone explain how the answer is impossible for test case 2 . Problem C.

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

    When ( (a < k && b < k) | (a % k != 0 && (b / k) == 0) | (b % k != 0 && (a / k) == 0) is true.

    (a < k && b < k) -> Not even 1 game is possible.

    (a % k != 0 && (b / k) == 0) -> A has won (a / k) games and now have a % k remaining score, but B didn't won any.

    (b % k != 0 && (a / k) == 0) -> B has won (b / k) games and now have b % k remaining score, but A didn't won any.

    PS — The answer for test 2 is -1 because not even 1 game is possible. [For a game to be possible, there must be exactly 1 winner].

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

      for

      6 14 14 ?

      How ans is 4 ?

      Suppose by a=14 i made 2 set ( i assume that each set is consist of k serves) ,

      b=14 i made 2 set ( i assume that each set is consist of k serves) .

      Now there are a=2 remaining (a%k==2) , b=2 remaining (b%k==2) ,

      Now if i make a set with a+b=4 serve , here in this set there is no winner . So ans should be -1 .

      Is there any condition that each set's serve number should have to constant ?

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

Testcase #8 in E is very tricky, I spend last hour on finding bug that weren't even there :(

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

CodeForces contests are very hard for me:( like please!

»
10 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится +200 Проголосовать: не нравится

I’ve managed to solve problem F with Mo’s algorithm.

Let’s assume that an is a permutation of n. (For general case you can first discretize an.)

Let . For queries with length  ≤ size (r - l + 1 ≤ size), we can solve them with an DP.

For those with length  > size: let p = i * size + size - 1 and q = i * size. Assume that now we are answering queries with .

The key is to discover that if we just deleted x with this function,

void del(int x) {
  pred[succ[x]] = pred[x];
  succ[pred[x]] = succ[x];
}

then we could insert it back with this function.

void ins(int x) {
  succ[pred[x]] = pred[succ[x]] = x;
}

(This trick is used in Dancing Links.)

And my solution is:

Step 1: build a list with elements [ap...an],

Step 2: delete [an...ap + 1] (invoke del(ai) with descending indices, the order is important!),

Step 3: insert [ap + 1...an] back.

When doing step 3 we can also maintain an array mem[i] which stores the answer of range [p, i].

Step 4: build a list with elements [aq...an],

Step 5: enumerate all queries j in descending order of rj,

Step 6: delete [arj + 1...arj + 1],

Then we perform the same operations

Step 7: delete [aq...ap - 1],

Step 8: insert [ap - 1...alj] back,

Step 9: insert [alj - 1...aq] back.

Notice when doing step 8 we can get the contribution of [alj...ap - 1], the minimum of it and mem[rj] is the answer to the query j.

Here we get a solution with complexity .

You may see my code 24667598 for the implementation details.

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

Problem F was awesome in my opinion. Natural statement and solution that is easy but at the same time very hard to come up with.

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

Can Anybody Explain the problem C ??? I am not getting the problem....

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

i think the problems were highly enjoyable .... i had fun in this contest .... hope there will be an Editorial soon

»
10 лет назад, скрыть # |
← Rev. 3  
Проголосовать: нравится +143 Проголосовать: не нравится

I have solved problem F with single Segment Tree with fractional cascading. In fact it works a bit slower (545ms vs 483ms) than my solution without fractional cascading (as usual), but still faster than any other solution.
Interesting thing: function "update" is called not more than 60N times on each of the tests. So it seems to be and other parts of code are obviously .

Idea of solution is next:

I sort all queries by R and answer on them like on "Query on suffix", adding elements of array one by one. I keep segment tree with next structure: Value of each leaf is a minimum difference for i-th element of array on current prefix. Value of inner vertex is a minimum answer on subrange. The core idea is to continue updates only when we can improve answer for current prefix. It's based on simple thing: if right son in Segment Tree has a better value then we can get in left, we don't need to update left, because all queries are processed on suffix. To check if I can improve answer, I also keep sorted part of array in each vertex of segment tree and search for nearest element in subarray for currently added element via binary search. This is the part which can be asymptotically improved by fractional cascading.

I think it's not worse than according to this comment. But as I mentioned before it works like on testset of this problem. But maybe someone see the test, which can make my solution to work longer?

  • »
    »
    10 лет назад, скрыть # ^ |
    ← Rev. 2  
    Проголосовать: нравится 0 Проголосовать: не нравится

    Hello MrDindows, could you please help me to understand your solution?

    I saw your code without fractional cascading and I could understand most of it (functions build(), main() and getAns()), but I'm having trouble to understand function update(). When you call update(1, 0, n - 1, curr - 1, a[curr], d);, what is the purpose of passing the position behind the current r (curr-1)? And what is the purpose of variable d passed by reference?

    I know that immediately after build(1, 0, n - 1);, the inner nodes will hold sorted arrays of their respective segments (field a) and the actual answer for their respective segments (field ans). So, now, if a query coincides exactly with a segment of an inner node, then the answer is just the field ans of the respective node. But if a non-trivial segment is asked, then it's not easy to get the answer only with what we have so far. That's why you sort the queries and perform the updates one by one.

    But what exactly means to add a new element in your solution? What do we need to update in the inner nodes? I'm having trouble to understand this part... (which is basically the whole solution, hahaha)

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

      From what I understood, the query is simply getting the smallest element from l to r. The update works like this: d is the best result so far. The update works from right to left so it remembers the best answer to the right of the position where you are on the update. If you can use some element in this range to get a better answer (something like abs(elem-a[cur])<d), you continue the update. Else, you simply update the best answer (d) and return on this line:

      d = min(d, getAns(cur, l, r, l, to));

      The idea is that you don't need to update every single position since you update the queries by increasing order of r, so the queries will always go on until the end so if you updated the later positions with a better answer, you don't need to update this position. You use curr-1 because you'll pair up a[curr] with some a[i<cur].

    • »
      »
      »
      10 лет назад, скрыть # ^ |
      ← Rev. 3  
      Проголосовать: нравится 0 Проголосовать: не нравится

      I've also used his solution and code to fully understand problem, so I'll try to explain from my perspective.

      We are processing queries from smaller R's to larger. Let's say that we have done the following for all previous R': When we are at next R we want to check if a[R] can help us. What should we try to do? To check for all R's that are smaller of our current and see what is a[R] - a[someR]. But that will TLE. That's the point of segment tree, because we want do it now. We are saving in all leafs a[R] - a[leaf], and in inner nodes minimum of their children. Whenever we face new R we must update all leafs. Again, if we do that naively, (I mean leaf per leaf) that will TLE into oblivion. So here comes powerful update. Since R is increasing, we want to make better solutions as right as possible, because when we do query(L, R) we want to have best possible solution on that interval. We will update leaf that corresponds to a[R - 1] with a[R], while traversing through segment tree we can actually update all other nodes. First of all, we don't want to spend time updating nodes that can't make better solutions with current a[R] (that's the d part), so we are always checking that. Now the core idea: Some nodes don't need to be updated because query will never cover them.

      Next level graphics

      ...[...x....y....]...

      ...L.............R...

      On that picture X is value that is greater than y. Querying L..R will use only y, since x is obviously larger. We are using that logic in updating. Why would we update whole left subtree of current node (if we need to go in right) if we can't make our solution better with it? So when we must go in left subtree when updating, just go, but while going right, apart from updating right subtree, we will update only the rightmost leaf in left subtree to be sure that we are making better solutions on positions as right as possible.

      You can also note that after segment tree initialization, we can't do classic queries to get information about solution on segment L..R. Let's say that solution on L..R will be made with L1..R1 and L2..R2, that don't overlap (segment tree query idea). We don't know about solutions with any number from L1..R1 with any number from L2..R2. That's why we must do all work described above.

      I hope that this helps.

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

    Could you please explain more about why it's not worse than O(NlogNlogC)?

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

Thanks for the round! I really enjoyed problems D and E! Couldn't solve them during the contest, but algebra problems are really fun and only one line was missing to get AC in problem E. Won't miss next time!

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

Can we have official editorial

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

editorial?

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

Recently I missed CF contest...

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

Can somebody please explain the dfs and dp on trees solution for problem E?

  • »
    »
    10 лет назад, скрыть # ^ |
    ← Rev. 4  
    Проголосовать: нравится +16 Проголосовать: не нравится

    In the first place you root given tree in its center (middle point of diameter, which you find using dfs/bfs few times). Then you solve problem with dfs, starting at root(center):

    • for leaf node answer is 0

    • for non leaf — non root node answer is k if for all its children answer was k - 1

    • for root :

      • if there are at most two different lengths x1 and x2 in roots children answer is
      • if there was only one different length x1 in roots children answer is

    where i is maximal number such that 2i divides nominator. I'm not sure whether that's dp/dfs solution you expected, but that's more or less how I implemented it.

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

      why the center ?

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

        It is impossible to merge a path containing center inside (a1, a2, ... , ak can not be the center node). There are few cases to consider. To make things a bit easier let us assume, that in our tree there is unique center (edge-diameter is even and equal 2d). In following points by child tree I mean child tree of a center

        • if path we try to merge starts in a child tree A and ends in child tree B of depth < d there must be another child tree C of depth d to make diameter equal to 2d one of nodes on path has degree > 2

        • if path we try to merge starts in a child tree A and ends in child tree B of depth d then

          • length of path in tree B is equal to d whole path is longer than d it is impossible to merge it with any other path in tree of diameter 2d
          • length of path in tree B is less than d and B still has depth d we have some node of degree > 2 on this path

        Still it is possible to merge using center as merge point (v could be the center node), but in the first place we must reduce each child tree to a single path (whole graph will be star like). Then if there are at most two different lengths of arms in this star it is possible to reduce whole graph to a single path.

        I consider my proof writing rather far from perfect, thus any remarks and further questions are welcome (to point out what is ill written here and make me better proof writer).

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

        From my understanding: Lets start with simple path. Now all the nodes between left unfolding and right unfolding are "contenders" for root. i.e., all the nodes which are not included in unfolding(outside of unfolding). Lets denote midpoint of current path be "m". Now if we perform a "left unfolding": with "m" being replicated: Midpoint of new diameter would be vertex on which unfolding is performed. else: New midpoint could be same vertex "m" or vertex on which unfolding is performed. Similarly for "right unfolding". In any case midpoint of diameter will be "outside" the unfolding. Now, It can be seen that further steps doesn't affect the midpoint. So, midpoint will always be outside the unfolding and thus can always be root.

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

      I actually wanted any solution(no editorial). The tags on the problem said dp and dfs so I mentioned them. Thanks for the explanation. :D

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

Can't find the editorial.... Can someone share the link if it is out?

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

I hope official editorial will be posted soon.

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

Any idea why this fails for Div2 E ? http://codeforces.me/contest/765/submission/24705450

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

would there be an editorial for this ?

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

How can DP be used to solve problem E ?