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

Автор GlebsHP, история, 10 лет назад, По-русски

Всем привет!

Сегодня состоится второй и последний регулярный рейтинговый раунд, составленный с использованием задач VK Cup 2016 Final Round. Разумеется, как и в предыдущий раз, был дополнительно подготовлен набор простых задач, чтобы контест был интересен всем участникам.

В прошлый раз в комментариях указали, что я забыл поблагодарить MikeMirzayanov за великолепные платформы Codeforces и Polygon. Исправляюсь, Миша, реально норм :)

Разбалловка будет опубликована ближе к началу раунда. Желаем удачи и красивых решений!

UPD1. Разбалловка div2: 500-750-1000-1500-2000-2500. Разбалловка div1: 500-1000-1500-2250-3000.

UPD2. Соревнование завершено, поздравляем победителей!

Div1: 1. ainta 2. W4yneb0t 3. Petr 4. muratt 5. kcm1700 6. Vercingetorix 7. Tinsane 8. Reyna 9. aid 10. zemen

Div2: 1. MinamiKotori 2. Ancient_mage 3. WhatTheFua 4. Yanba 5. macieck9 6. OMRailgun 7. radoslav11 8. zhsh 9. skywalkert 10. abgnwl

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

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

You also forgot to tell the main character of the problems.

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

don't forget to add codes on editorial as previous round.

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

Where are you tourist? :(

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

how many tasks are in this problemset ?!!!

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

how many tasks are in this problemset ?

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

how many tasks in this problemset??!!

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

petr now

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

want another Christmas tree!!

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

Is tourist travelling?-_^

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

New king of the iron throne of codeforces is Petr now :). tourist is busy in westores and hoping to see him to fight for the iron throne of codeforces again :P

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

I'm Really surprised :D

I hope I'll be Specialist :))

->-> Thanks A lot <-<-

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

Guess it will be a colorful contest ;). Good luck everyone :)

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

what if mike Participated in one contest ? .. won't be great contest :p !?

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

Wish good-luck to all. Happy Coding :)

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

Всем удачи)

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

Всем много удачи!)

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

Game of codeforces throne likely to be unseen today as neither tourist nor Petr have registered so far! Can TooSimpIe make it happening today?

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

Scoring distribution?

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

score distribution right before the start wow, they really meant right before the start.

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

Tired of pokemon commercials.

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

Seems like I can't concentrate on the contest with police helicopters hovering around...

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

Edit: It's too late to delete this, so I'm sorry for taking up some unnecessary space. Basically I made an incorrect assumption that I'm not sure is legal to post here during the contest.

Is anyone thinking the sample test case #2 for D is incorrect possibly?

Here is my understanding for the second sample test:

  • students at 0 bus at 0 at time 0, 1 person gets on bus 2 walking
  • students at 3 bus at 6 at time 3, 1 person on bus arrives at end 2 still walking
  • students at 4 bus at 4 at time 4, 1 person gets on bus 1 walking
  • students at 5, bus at 6 at time 5, 1 person on bus arrives at end 1 still walking

this is already more than the answer the sample case gave.

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

Could you please include an explanation for Div.2 D second example?

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

Good contest with good problems! Hopefully everyone did well and learned a lot today. :)

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

В задаче B div.1 Nlog^2N предполагалось отсечь?

Даже если и не предполагалось, то отсекли:D

ЦД-шка чет не зашла:CC

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

    Там есть решение за O(n), так что ничего удивительного.

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

      и как ее так решать?)

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

        Подвесим дерево. Очевидно, выгоднее всего, чтобы все пути, которые мы выберем проходили через корень. Это можно сделать, если в поддереве каждого сына корня не более половины университетов. Тогда ответ — сумма глубин всех университетов. Если есть сын, у которого в поддереве больше половины университетов, то нужно соединить все осталные университеты с университетами этого сына и решить для него задачу рекурсивно.

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

          решить задачу рекурсивно

          Как выбирать с какими вершинами максимального поддерева соединять, а с какими — нет?

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

            Можно передавать в качестве параметра функции количество вершин сверху, которым нужно найти пару. Тогда нужно будет их соединить с университетами того сына, в котором их больше половины.

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

        Можно так: рассмотрим каждое ребро графа. Допустим, что по одну сторону от ребра X вершин, по другую Y — тогда в оптимальном разбиении по ребру всегда будет проходить min(X,Y) путей (показать просто, если рассмотреть перестановку путей). Потому просто считаем количество университетов в каждом под дереве (X) и выбираем минимум между X и Y(что равен k*2-X).

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

Nlog^2N в Б div.1 предполагалось отсечь?

Если даже и не предполагалось, то отсекли:D

ЦД-шка не зашла :C

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

Could Div 2 E be solved by keeping count of number of childrens if a subtree that are in the 2*k vertex list. And then counting how many times an edge u-v would be used depending on something like min(count[v], unpairedLeft — count[v])?

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

Many thanks to GlebsHP for a nice round.

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

My code fails for pretest 11 for problem C .ANY idea? http://mirror.codeforces.com/contest/701/submission/19344527

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

Beautiful Div1-B. The problem seem impossible at first, but after you switch your point of view (from vertex to edge), it become very easy.

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

Because there is no hack in Div2-B, can we consider Div2-B's pretest is system tests?

UDP: I know the answer now. The author may add some more tests.

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

Implemented a solution for Div2-D using ternary search optimization, really nice problem, unfortunately my solution works but it is too slow i didn't even submit it (a lot of recursive calls going on). Curious to see what the real solution is :D

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

    A O(1) mathematical formula exists.

    T = el / (ev1 + v2 - v1)

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

      Can you explain your formula?

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

        Let us try to make all people reach the end at the same time. So every person has to travel by bus(at most once, as given in statement) by the same amount of time.

        So, let distance travelled by every person in bus be P. If bus picks up some people at point A and they disembark at point B, then it needs to travel (v2 - v1) / (v2 + v1) * P(let this be equal to Y) back to get to other left people, because they would have travelled some distance on foot with speed v1.

        Let Z denote the number of trips bus has to make, it is equal to ceil(n / k). Therefore we have a relation, bus goes forward Z times, and goes back by the amount Y, Z - 1 times. Add these up, and they should equal L.

        That is, Z * P - (Z - 1) * Y = L. So we can find P now. Once we know P, we can find the answer easily.

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

          Could you, please, explain Y = P  ×  a bit more?
          Why do you divide by v2 + v1?

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

            Take a paper and pencil, draw a line segment AB of length P. Now we will imagine that bus goes from A to B, leaves children at B and then returns and meets other children who started from A at some point C on the line segment.

            Time at which they both meet will be equal. So equate time( = distance travelled/ speed ) of both and you will get the formula.

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

            Time for bus to travel from A to B and return back to meet students who travel on foot (at point C) is

            Time for bus to travel from A to B is

            Hence, time for bus to return from B to C is , which equals to .

            Therefore, DistanceBC  =  t * v2  =   * v2  = 

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

          I understood everything before this equation Z * P - (Z - 1) * Y = L. How is the difference(or sum, since its written sum above) equal to L?

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

            Z = ceil(N / K).

            As everyone reaches the end at the same time, we have to make exactly Z trips in the forward direction. Naturally, when the bus goes forward the last time, it should reach the end point with all children and it won't go back.

            Therefore trips that bus makes going back is Z - 1. Therefore, bus goes Z times forward and Z - 1 times back. We have to subtract them and it should equal L. Try drawing it on paper, by making exactly ceil(N / K) trips forward and ceil(N / K) - 1 trips back.

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

      a simple mathematical formula:d = [(n-1)/k]+1 ans=l/v2*((d*2.0-1.0)*v2+v1)/(v2+(d*2.0-1.0)*v1);

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

Isn't div 2 D binary search on time ? But can anyone layout the conditions ? Same as div 1 A.

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

Anyone please explain the 2nd test case of Problem D (Div-2). In which way the ans is 4.7142857143 . My calculated ans is 5.6666664444 :( .

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

WTF with DIV2 A? Almost all people in my friend list have it wrong on system tests :O Edit: Seems it is fixed now! phew :D

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

Haha, is there anyone notice a small bug in the very first seconds of system testing? All of the accepted submissions are shown to be hacked!

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

Is there anything particular about Div1,B testcase 10 or is it just a large test case? I'm pretty sure my code was O(n) and I couldn't think of any exceptions.

19346020

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

I think problem setters should not add unnecessary character set like in Div2 C. Either keep a-z or A-Z , but why both? >( ..

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

Am I the only person who understood the sequence: "...reversal of the bus, take place immediately and this time can be neglected" that it takes 0 time to reverse (go backwards) no matter how long?

I know that it would mean a very strange bus, but I lost 25 minutes before noticing it :(

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

how to solve div 2b?

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

    Denoted by x the number of rows where no rook is placed, denoted by y the number of columns where no rook is placed. Answer = x*y.

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

    In total (in the beginning) there are n * n cells.
    These n2 cells can be viewed as n rows of cells and n columns of cells.
    When we place a rook, it destroys completely 1 row and 1 column.

    Let's keep 2 arrays which will tell us, whether the row/column was destroyed or not:
    bool destroyedRows[100000];
    bool destroyedCols[100000];

    After you place the first rook at cell (r0, c0), we can destroy row and column like that:
    destroyedRows[r0] = true;
    destroyedCols[c0] = true;

    The amount of alive rows decreases like that:
    long long cellsLeft = n * n;
    cellsLeft -= n; // for destroyed row
    cellsLeft -= n; // for destroyed column
    cellsLeft += 1; // because row and column intersect at point where rook stands

    If you place the next rook at cell (r0, c1), you cannot destroy the row r0 the second time.
    That is why you should first check whether it was already destroyed:
    if (!destroyedRows[r0])
    {
        destroyedRows[r0] = true;
        cellsLeft -= n;
    }

    The final idea is to accumulate the amount of destroyed rows and destroyed columns till the current rook.
    Imagine that you have already processed i - 1 rooks. Now, the i'th rook wants to destroy the row ri and the column ci. If the row ri hasn't been already destroyed, you should destroy it now. But some cells on that row ri where previously destroyed by i - 1 rooks before the current rook. When they (previous rooks) were destroying there's columns, they also crossed the row ri! How many times did they cross the row ri? Well, they should have crossed it when they destroyed their's columns and we should just keep track of the number of columns destroyed (which is  ≤ n - 1). We will use this number to add back the amount of destroyed columns:
    ...
    destroyedRows[ri] = true;
    cellsLeft -= n;
    cellsLeft += destroyedColumnsCount; // add back cells that were already destroyed before

    That is the general idea. The rest is implementation detail... =)

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

    I think the basic idea is quite easy.
    Initially, number of rows(n) = number of columns(m) = n

    Then there are only 4 cases:
    1. if you have not visited the row and the column both
    visit them and reduce them, n-- & m--
    output: cout<<(n*m-(n+m-1));
    2. if you have not visited the column visit and reduce the column size, m--
    output: cout<<(n*m-n);
    3. if you have not visited the row visit and reduce the size, n--
    output: cout<<(n*m-m);
    4. if you have visited both the row and column, there is nothong to do
    output: cout<<n*m;

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

    Here is my approach :)

    For each query, you have to find number of cells on the board which do not have their row number and column number equal to any of the positions of the rooks placed uptill then. Actually, I did it by solving its complement, i.e. number of cells on the board which have their either their row number or column number or both not equal to any of the positions of the rooks placed and then subtracting this answer from the total number of cells.

    Maintain two sets for rows and columns. Denote them by r and c. Total cells -> (n*n)

    Cells which their row equal to any of the rooks and column not equal to that of any -> (n-size(c))*size(r)

    Cells which their column equal to any of the rooks and row not equal to that of any -> (n-size(r))*size(c)

    Cells which their row not equal to any of the rooks and column not equal to that of any -> (n-size(r))*(n-size(c))

    Therefore Answer = (n*n) — (n-size(c))*size(r) — (n-size(r))*size(c) — (n-size(r))*(n-size(c))

    On further simplification, this turns out to be,

    Answer = n*n — size(r)*n — size(c)*n + size(r)*size(c)

    Answer = (n-size(r)) * (n-size(c))

    Here is my solution: Code

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

can rating fall over 100?

I think mine will...

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

I started trying problem A after I read it I couldn't understand the second sample, so I decided to move to B, after I solved it I went to read C, I figured out the solution quickly:

apply max flow considering all edges capacity equal to 1, if it's more than 2 then output -1 otherwise try out to remove each edge which became saturated and for each of them find bridges and pick best bridge on the path between s and t of course there's some corner cases to handle.

wow very easy idea I decided to code it although I have bridges and max flow codes beforehand it took me a full hour to code it, after passing all samples I submitted it and got WA after fixing some bugs I still got WA the contest ended but I didn't solving anything except B, if I knew coding C is overkill I would have returned to solve A instead :(

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

    I had the same solution to C as yours, but little bit simpler — you don't have to compute maxflow. If for every "deleted" edge, there is no path from s to t consisting only bridges, then we print  - 1.

    I didn't code it, but it's O(m2). Isn't it too slow?

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

    I had a solution that didn't need flows and works in .

    Get a path from s to t. If none exists, print 0.

    This path will consist of at most n-1 edges. Now for each edge in this path, remove it from the graph and construct the bridge tree of the remaining graph. If s and t are in the same block int the bridge tree then removing this edge is of no use to us. Bridge Tree can be constructed in

    If s and t are in different blocks find the minimum weight edge on the path from block of s to block of t in the bridgeTree. Now you have two edges, compare their weigths with the current minimum and update accordingly.

    Add the removed edge back to the graph and repeat.

    Took too much time debuggin but oh well :/ 19347868

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

Глюки Системное тестирование 100% Дорешивание

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

div 2 D anyone ?

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

thanks Physics for div2 D ))

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

Overflow in B anyone?

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

Was I the only one who thought "reversal" in Div2 D means "traveling" back to the students after the drop-off? Bad me. :(

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

Why the system testing is stuck at 100% ?? We have been seeing this for the last few contests !! Please fix this issue! :(

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

Getting WA in test case 31 in Div2 B. Can anybody give any insight why? Thanks! :)

Solution

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

Откройте, пожалуйста, код сабмишенов с финала ВК

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

petr now

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

When will be editoral?

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

Any hints on how to solve div 2 C ??

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

upset..I got rank 10 too but not on the winners' board..Orz

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

rest in pepperoni petr :'(

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

Hi, can anyone tell what may be the cause of this error in the Div.2 task A?  19333396

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

In recent rounds I have seen a glitch in the standings. When the system testing starts all queued submissions turned to failed. May be it's not a big deal but I wonder why this is happening?

NB: The round was great. I'm looking forward to seeing so many rounds like this one. Thanks for the round :)

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

can anyone explain the approach to Div2C?

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

    Go through the sequence and push symbols into the queue one by one. When it contains all types of symbols, this means you found a subsequence that satisfies problem statement. Now you can crop it from the beginning to make it as short as possible — just delete front symbol from the queue while it still contains all types of symbols. When done, check if this snippet is the shortest that you found so far. To continue searching, just remove first symbol from the queue (it should miss one type of symbol now) and continue pushing them from the given sequence. All the procedures can be performed quickly using STL structures like queue and set.

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

    I will explain my solution (binary search + sliding window) at first, its obvious the answer is the size of some contiguous subsequence that have all types of pokemons.

    if you try every range with size 1, then every range with size 2, .. until have range with all types of pokemons you can get the answer. but this is to slow which takes O(n^2).

    so you should do binary search on the size of the range, which takes O(n*log(n)). http://mirror.codeforces.com/contest/701/submission/19338973

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

approach for div2E ?

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

Когда будет разбор?

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

Div2D: What is the significance of "In order to avoid seasick, each of the pupils want to get into the bus no more than once"? I can't think of a case where shuttling a student more than once would be useful.

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

    For example, let there be three students, but let the bus carry only two simultaneously. Intuitively, a good solution would carry each of the subsets {1, 2}, {1, 3} and {2, 3} on the bus for the same duration. However, this is impossible given the constraint.

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

      Because the bus takes time to drive back the constraint doesn't matter. Makes the problem easier though, otherwise you'd have to figure out yourself that it doesn't matter...

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

        It does matter. I think the point in Gassa's example is that without the constraint we never have to drive a half-empty bus. So the bus is always driving at 100% capacity.

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

          It's impossible to drive the bus at 100% capacity if there's 2 seats and 3 pupils. The bus will always have to drive back to get the last pupil and drive at 50% capacity.

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

            Right, when the bus is driving BACKWARDS it's always empty.

            When the bus is driving FORWARDS we have a capacity problem. Without the constraint we could always drive forwards with 100% capacity. With the constraint we might sometimes have to drive a half-empty bus. In Gassa's example, we might first drive {1, 2} and then drive {3}. Even though we have room for 1 more passenger, we can't take anyone, because 1 and 2 have already been to the bus and we have no-one else we could take.

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

              'The constraint' meaning 'each of the pupils want to get into the bus no more than once', even without the constraint the bus cannot always drive forwards with 100% capacity.

              There's no better solution without this constraint, just like you stated in your original comment.

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

                Read Gassa's example again, it's very short and it illustrates the problem perfectly. It has the bus always driving forwards with 100% capacity. Add the constraint and the capacity drops.

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

                  After reading Gassa's example again (and again) I still don't understand. Could you give me an example of how the bus will always drive forwards with 3 pupils and 2 seats?

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

                  I wasn't able to construct an example. I may have been wrong about the capacity thing.

                  Let's say we shuttle {A,B} for some distance. Now we have to shuttle {C} for the same distance on its own. We can't shuttle A with C at this point, because A is ahead of C.

                  So now I'm back to square 1, wondering what's the significance of the constraint in the first place.

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

      This looks impossible even without the constraint. How does the carrying of each of the subsets {1, 2}, {1, 3} and {2, 3} looks like?

      Do they need to travel backwards with the bus? Does it add efficiency?

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

        I wasn't able to construct a speedup example so far.

        My point is a bit different: when the constraint is there, it is irrelevant whether or not it's possible to get faster without it. So this investigation happens after the contest, not when solving the problem. Which is a good thing, especially if there is indeed no faster solution without the constraint.

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

Who else has noticed that tourist has become top on the rank table even without participating!?

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

Ставь лайк если бесит, когда авторы не выкладывают разбор после раунда и приходится читать чужие говно-коды.

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

can someone explain me the process to solve div1 D? i was thinking mo's algorithm but can't figure out the calculations. please help :(

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

can someone help me out im getting WA in #17 test case in DIV2-C 19356617

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

    It can be solved using binary search. map all the characters and store an array dp. where dp[i][j] represents the number of occurrences of the ith character from index 1 to j. Then run a loop from 1 to n and for each i find out the lowest index r, greater than i where each character occur at least once. the complexity is O(n log n), so it easily passes. there might be two pointer solution but, binary search seemed easier and safer to me.

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

    Line 28: r<=n is causing problem.

    You have to stop the loop when r hits n, remember to care of the cases where string[n-1] is part of the optimal solution.

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

When will we read the anlysis of the problems?

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

My approach on Div2E/Div1B, not necessarily correct, maybe I just slither through the system test cases.

Step 1:

Set a node which is only connected by an edge as the root of the tree.

Step 2:

DFS from this node, for each subtree count it's amount of university inside the tree. Select the minimum among all the nodes which has at least k university. (This is probably the node which every pair in the optimal solution will past... I say PROBABLY because I don't have a strong prove for this, but I can't think of a counter case.)

Step 3:

DFS from this node, the answer is the sum of this tree.

My submission: http://mirror.codeforces.com/contest/700/submission/19363132

A kinda similar question I would recommend to try out: http://mirror.codeforces.com/problemset/problem/685/B

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

Any tips on Div2F/Div1C? Cycles in the graph seems to be a huge obstacle in the problem.

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

    For simplicity assume that there is no multi-edge nor self-loop (they can be handled in the beginning).

    First idea: brute force — remove every edge and look for bridges between s and t and find the best option. Iit can be done with standard dfs with low fuction, but -supposing you start if from s — you also need to remember if there is t in the subtree you've just visited. Complexity: O(m^2)

    Better idea: take a path P between s and t (if it doesn't exist — output 0 0). Observation: At least one edge from P must be removed. As the path contains at most n edges, we get O(n*m) which easily fits the limits.

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

dude , where is the editorial ?

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

How long we wait for the editorials??

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

Подскажи кто нибудь,как в задаче D див2 правильно использовать бинарный поиск. Как и по чем его организовать? Если можно обьясните на русском языке и подробнее. Спасибо.

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

    Будем писать бинарный поиск по ответу, то есть зафиксируем "минимальное время, по истечении которого все школьники доберутся до места проведения экскурсии". Дальше рассказывать?

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

      Конечно рассказывать!

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

      Я вывел такие формулы. Допустим возьмем какое-то произвольное расстояние k. Тогда автобус его проедет, за время t = k/v2. Это же время пешеходы тоже двигались. Значит за это же время они прошли путь (k/v2)*v1. Остаток пути для оставшихся пешеходов будет равен k — (k/v2*v1) . Дальше никак не пойму что делать? И как учитывать вместимость автобуса?

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

        Вместимость автобуса можно учесть разбив всех людей на округление_вверх(n / k) групп. Далее будем симулировать процесс прохода каждой группы расстояния l. Основная идея в том что мы будем определять минимальное расстояние которое нужно проехать данной группе на автобусе, что бы успеть за ранее закрепленное время.

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

Will Editorial be published this time? Waiting...............

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

Editorial will be published soon, I guess. Another question is "when is the next round?"

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

Hints for E and F div 2 ?

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

D solution:

Note these observations:

  • The total time is set by the worst kid travel time.
  • The optimal solution doesn't need to make the bus go to L on each trip. It may leave kids in half way and go left to take another kids.
  • The optimal solution should end in L on the last trip. Proof by contradiction: If we don't end in L on the last trip, then we are leaving kids half way at speed V1, that could go at speed V2. Such proof do not apply to the other trips because time is set by the worst kid. The kid we are helping is the worst kid only in the last trip.
  • Each kid will travel at speed V1 some time, and travel some time at speed V2 until it reaches L. If a kid travels more time at V2 and less time at V1 it will always be faster. the proportion t2 - t1 defines the kid's time to target. V1 * t1 + V2 * t2 = L
  • If we increase V2 time of some kids, then we are reducing V2 time of other kids, Some kids are traveling more time at the bus than others.
  • So, now I want to prove that in an optimal solution all kids must travel the same V2 time. I will do this again by contradiction. Imagine, that we have an optimal solution where two kids travel at different V2 times and one of them is the worst kid (if not all kids reach target at the same time, then there should be one or more kids to call the worst kid). Then we can always improve the worst kid travel time by increasing it's V2 time and reducing the V2 time of other kids. Improving the worst kid travel time implies improving total solution time, and as we reduced V2 time of kids that are not the worst, they don't affect the total solution time. So this is only valid if there are kids to be called the worst, and kids that are not the worst.
  • We have just proved that any solution where the kids V2 times are not equal can be improved, this means it is not optimal. So the optimal solution must make all kids to travel the same time at V2.
  • So now the solution is simpler. All bus trips with kids must always last the same and we could compute a growing F(x) = y where x is V2 time, that is bus trip time, and y is the position where the bus end in last trip. You need to see that if x (aka V2 time) is bigger then the bus travels more time to the right, so Y will be bigger.
  • As F(x) is a growing function, then we can binary search x until we find F(x) = L, and the bus last position is L. This is the only solution with all V2 time equal that end in L, this means, it is a valid solution. AS all other valid solutions don't have V2 times equal, they are not optimal, what means F(x) = L computed by binary search is the optimal solution to the problem. As the statement do not ask for x (aka V2 time) we should do the extra calculation of the travel time, but if we compute the F(x) = y we can easily compute F(x) = t where t is the total bus traveling time, or another option is to compute V1time = t1 using V2time = t2 and t = t1 + t2 (note that all kids reach target at the same time as the have the same t1 and t2!)
  • I recommend in binary search to use fixed number of iterations. It is the simpler solution, and we avoid the use of EPS (if you don't know what it is ignore this last comment).

Code:

  • F(x) = t manual calculation 19373739
  • F(x) = t based on v1t1 + v2t2 = L 19374507
  • »
    »
    10 лет назад, скрыть # ^ |
    Rev. 4  
    Проголосовать: нравится 0 Проголосовать: не нравится

    In the second test. Why can't I take each pupil on the bus per 3 meters?

    let (p1, p2, p3) positions of the pupils i

    t = 1.5 — (3, 1.5, 1.5) — p1 in the bus

    t = 3 — (4.5, 4.5, 3) — p2 in the bus

    t = 4.5 — (6, 6, 6) — p3 in the bus

    total 4.5

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

      You are ignoring Bus return time. Bus can not teleport from one kid position to another instantly. You need to add to your calculations meeting time from the bus going left and the kids going right.

      " as well as the — reversal of the bus, take place immediately "

      The reversal is the time to the bus to flip, not the time to the bus to return to search for more pupils.

      Your example of V2 time = 1.5s (3 meters) would be

      t = 1.5 — (1.5,1.5,3)

      te = (3-1.5)/(2+1) = 0.5

      t = 2 — (2 , 2 , 3.5)

      t = 3.5 — (3.5 , 5 , 5)

      te = (5-3.5)/(2+1) = 0.5

      t = 4 — (4 , 5.5 , 5.5)

      t = 5.5 — (7 , 7 , 7)

      You end in position 7, so you need to reduce V2 time.

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

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

Почему до сих пор нету разбора???

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

Any ideas on how to solve Div2F/Div1C?

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

    Find any path from S to T. Try to remove each edge of the path, In the resulting graph try to remove each bridge. This solution complexity is O(N * (N + M))

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

Публика требует разбора!

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

составленный с использованием задач VK Cup 2016 Final Round.

Какие из задач этого и предыдущего раунда были на VK Cup Final Round?

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

waiting for the editorial and next context ...

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

Ну где же все таки разбор? Каждый в ожидании ждет разбора.

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

Why does python submissions for div2 problem E gets runtime error in test 11? n is 200000 and my code: http://mirror.codeforces.com/contest/701/submission/19425329

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

11