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

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

Всем привет!

Совсем скоро, 12 января в 19:30 MSK состоится Codeforces Round #223, автором которого являюсь я. Это мой десятый раунд на Codeforces и я надеюсь, что не последний.

Спасибо Геральду Агапову (Gerald) за помощь в подготовке раунда и Марии Беловой (Delinur) за перевод условий на английский.

Настоятельно рекомендую прочитать условия ВСЕХ задач.

Это первый раунд в этом году. Кстати, в прошлом году первый раунд для двух дивизионов тоже был мой(а по статистике +1/-1, оказался самым крутым из тех, что я давал). Надеюсь, что в этот раз задачи окажутся еще более интересными для Вас. Получится ли? Узнаем после окончания раунда :)

Gl & hf ! :)

Разбалловка в обоих дивизионах стандартная.

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

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

Sereja, You are savior man, You keep creating good problems regularly :)

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

Yess! Another Sereja's Round!

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

9 января в 19:30 MSK

Получится ли? Узнаем после окончания раунда :)

Ну как прошло?

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

В записи указано 9 января... Чем-то напиминает вечеринку Стивена Хокинга для путешественников во времени.

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

First Contest of 2014 :) Wish everyone a happy and successful year.. And High rating too :)

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

Hope it a year, with success, more contests, and faster system test.

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

According to your first problem in 2014(Sereja and Graph in CodeChef), it is obvious that this contest will be very interesting! :)

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

Happy new year to all with this contests.

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

Sereja u forgot to thank MikeMirzayanov for creating Codeforces. :)

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

А я каждый твой контест наивно читаю условия ВСЕХ задач, но мне что то не очень это помогает(

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

Sereja's problems are actually cool( although I only met 2 of them on CodeChef ).I can't wait to see how many AC submissions will fail on "Sereja and graphs" at the end . May it be a great round!

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

    Codechef doesn't work that way. there's no pretests, all tests are system tests. once u get AC, u have solved that problem for sure.

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

      actually, you are not 100% correct. sometimes they update data-set during contest. once i got AC in this problem on January 3, they updated dataset on 6th January. and my code failed, i had to solve that problem again.

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

        But the scores for the 9 non-challenge problems don't change after the end of the contest. That's the point.

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

A Happy New Year to all, and good luck on the first contest of 2014!

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

It seems great! This is my first join in the contest of Codeforces Round, I hope I can get good marks~ :>

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

1st round of 2014, a little late start i think.

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

    Maybe 12th day it's pretty late, but note that there were 3 contests in last week of last year!

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

Good lucky to everyone!~~

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

Как только у меня экзамен, модуль/кр, так за день до этого Sereja даёт свой контест((

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

    Как только КФ, так какой-то препод экзамен ставит :(

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

      Я сам школьник, но хотел бы узнать: реально бывает в такое позднее время экзамен?

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

        Экзамен завтра, но ходят слухи, что к нему нужно готовиться сегодня:)

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

          Я вам больше скажу, товарищи. Пару часов назад узнал, что экзамен у меня завтра в 9 утра, а не послезавтра. А приезжаю я завтра в 8.30.

          Пожелай мне удачи в бою :)

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

Really nice New Year's first contest!Good luck to everyone!

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

In reply to this: http://codeforces.com/blog/entry/10138#comment-155733 Keep in mind that this will be a historic round, because today for the first time I'll become a yellowcoder from a redcoder :P. But I will try to keep this color :D.

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

Pretty tight pretests. It seems comparatively there will less hacking this time.

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

Pretty tight pretests. It seems there will be comparatively less hacking this time.

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

Как решать С?

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

    Заранее посчитаем для каждой позиции "баланс" (количество "(" левее этой позиции минус количество ")" левее этой позиции). Ответ на отрезке однозначно определяется балансом в начале, балансом в конце, минимальным балансом на отрезке, UPD: и длиной отрезка.

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

      А можно подробнее?

      По-моему, в строке "()()()" для подстроки [1,2] и [1,4] все три указанных параметра совпадают, а вот ответы отличаются. Что я не так понял?

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

        Прочитал решение Пети. Еще зависит от длины отрезка.

        Так что для примера выше всё норм.

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

    Алгоритмом со стеком найдем для каждой закрывающейся скобки на позиции right парную открывающуюся скобку на позиции left и заполним массив a[left] := right. Теперь в этом массиве нужно отвечать на запросы "на отрезке [L, R] найти количество чисел, меньших R". Это делается деревом отрезков — в каждой вершине нужно хранить все числа на соответствующем отрезке, а при запросе бинарным поиском искать количество нужных чисел.

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

      Жесть. Я свёл к этой же задаче. Только решил попроще scan-line + fenwick tree.

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

      А как это все работает на примере "(())"?

      a[1] всегда пустое, так как открывающаяся скобка на позиции 2 всегда ближайшая? Тогда как посчитается ответ для l=1, r=4?

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

        Извиняюсь — я наврал в объяснении. В решении у меня написан стек, а тут написал неправильную жадность:)

        Скобки нужно распределять алгоритмом со стеком.

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

          Да ёлки-палки, все поняли, что для закрывающейся открывающуюся. Речь идёт о том, что ближайшую ещё не использованную надо находить, иначе ты для 3 найдёшь 2 и для 4 найдёшь тоже 2.

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

      Можно a[right] = left, и тогда ответ на отрезке [L;R] это количество чисел больших L среди всех, которые левее R. А это равно количеству всех закрывающих скобок левее R минус количество чисел на [0;R] меньших L, т.к. если закрывающая скобка лежит левее L то её пара точно левее. Таким образом надо просто уметь считать сумму на префиксе.

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

      Не совсем же так. Нельзя просто для каждой закрывающейся скобки найти ближайшую открывающуюся, нужно учитывать парность.

      Например, для строки "(())" получится массив [undefined, 4, undefined, undefined] и ответ 1, если следовать описанному алгоритму. А вот если разбивать скобки на пары обычным алгоритмом со стеком, то получится правильное решение.

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

        Да. Конечно, надо учитывать парность. Не очень внимательно прочитал и согласился :)

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

        Согласен, я наврал — просто в момент объяснения мне это почему-то показалось эквивалентным.

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

    А я sparse table написал.

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

    У меня такое решение: Для каждой открывающей скобочки найдем следующую за ней закрывающую, пронумеровав их c 1 (обозначим за f(id)). Теперь отвечаем на запрос. Пусть самая левая после L '(' имеет номер s (среди открывающих), самая правая ')' — t (среди закрывающих). Тогда, запустив бинпоиск по ответу, мы проверяем, что существует скобочная последовательность размера X таким образом: f(s) <= t — X + 1 && f(s + 1) <= t — X + 2) && ... (так как всегда нужно брать первые X открывающих и последние X закрывающих). Это запрос на отрезке [s..s+X): (max по i = [0..S) (f(s + i) — i) ) + s <= t — X + 1.

    P.s. Ну и разбалловка...

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

nice contest! thank you Sereja

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

only 10 successful hacks, of which 7 were on the comparatively difficult problem E.

Sereja, from next time plz try to make hacking more possible, as it is also an important part of contests.

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

    From where can we see all the hacking attempts made in a contest?

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

      u can see all successful hacking attempts in the Status tab, after changing verdict option under the filter to Hacked.

      if u want unsuccessful ones also, u can see them in the Hacks tab. but this usually takes a few hours after the round ends to become accessible to all users.

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

У меня одного решение Div. 1 A на O(nlog2(n)) вышло? =)

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

    у всех по идее. Там либо сложность близкая к линейной, либо на 10м тесте крашится по памяти (если тупо хранить всю сгенерированную последовательность) :P

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

      Ну не знаю, у меня чистый O(nlogn).

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

        А у меня линия. Просто двигаем 2 указателя — один по запросам, а другой по строящейся последовательности.

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

          Красиво. А то я думаю, зачем в возрастающем порядке все дается :)

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

        O(n + m) просто можно.

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

        Ну если уж на то пошло, у меня вообще O(n)

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

    Ни у одного :)

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

A contest where faulty point distribution can break one's day, C was solved by 3 times more people than B. Interesting set though.

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

Forgot to delete cerr... Got AC in almost the same code in problem C. I'm going to lose a lot of ratings...

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

superb speed of system testing today! i think MikeMirzayanov's New Year resolution was to install better testing computers! :D

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

Спасибо за раунд и отличные задачи!
P.S. Надеюсь поменять цвет :)

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

NlogN solution for C. Time limit in test case 13 ... , i lost lots of rating points cause of my slow nlogn solution ... pfffff

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

What does this mean? wrong answer Unexpected EOF in the participants output

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

Why was E E? OwO

btw very fast system test :)

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

3 unsuccessful hacks :(

how this code passed test 14 for div2B?

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

    Accessing out-of-bounds arrays in C++ is "undefined behavior", which means anything can happen: the computer might explode, it might corrupt memory, or, in this case, it can appear to work properly. :)

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

      my 3 hacking attempts is about this.

      I remember that I got RE in one of the past contests just for 1 more index of array.

      I was unlucky at the first contest in new year :(. what will be happen for me??

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

    i think that the algorithm is correct, very strange but correct

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

Привет, див1)

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

Thanks a lot Sereja for another awesome round! :D

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

I have a problem. I cant'n see the solutions of other participants, neither test cases or hack somebody solution. Because the solution of someone else appears not in other web page, else in the same page, but this not work for me. Mi web browser is Firefox. Even for write this comment I had to use Internet Explorer. What I need to configure in Firefox for that works?

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

    I think you have to install adobe flash player for firefox !

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

      Thanks, but I reset Firefox to it original configuration, and alls works. It seems that some features of firefox like some themes or add-ons were causing troubles.

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

So easy!