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

Всем привет!

В воскресенье, 29 мая 2016 года, в 12-00 состоится второй квалификационный раунд Russian Code Cup! Мы будем рады видеть на нем всех, кто не прошел в отборочный раунд в первом квале. Ну а те, кто и завтра не сможет пройти в отборочный раунд, смогут принять участие в третьем квалификационном раунде 5 июня. Всем удачи и до встречи на раунде, не забудьте зарегистрироваться на чемпионат на сайте http://russiancodecup.ru

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

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

How many contestants in each qualification round advance to the elimination round? I advanced from the first round, can I take part in the second round?

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

We would like to invite you to take part in 2nd qualification round on Sunday, May 29, 12-00 Moscow Time. Register at http://russiancodecup.ru and participate! Good luck and see you at Russian Code Cup 2016!

Мы хотим пригласить вас принять участие в первом квалификационном раунде , в воскресенье 29 мая, в 12-00 по московскому времени Регистрируйтесь на сайте http://russiancodecup.ru и участвуйте!

Всем удачи и до встречи на Russian Code Cup 2016!

Сколько нужно программистов, чтобы написать без ошибок одно письмо-анонс? :)

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

И вновь баг с отображением решенных задач — я решил задачи A и D на прошлом раунде.

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

    Такая же история, но успел только первую решить... Перед отправкой заметил, что что-то не так, хорошо, что успел вернуться во второй раунд и решить 4 задачи.

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

Я не пишу раунд, тем не менее, зашёл посмотреть на задачи. Первые секунд пятнадцать показывались задачи с первого квалификационного раунда, а не со второго, это может многих сбить с толку. Сейчас уже показываются новые задачи.

UPD Почему у всех место 3? :)

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

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

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

    15 минут решал первую задачу из первого раунда = +час штрафа >_<

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

    Аналогично. Заметил это только когда дописал А и её некуда было отправить. В итоге потерял 11 минут, которых как раз был хватило чтобы исправить тупой баг в последней задаче(

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

    Нас таких много, тоже решал задачку с 1 квала. Еще иногда при отправке пишет "неправильно заполнена форма"

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

    Начал решать задачу В, оказалось очень много частных случаев (по крайней мере в моем решении). Убил на нее целый час, зато хорошо потестил, захотел отправить — смотрю, нет кнопки послать решение.

    И тут я понял, в чем прикол...

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

Почему нельзя участвовать неофициально если уже прошел?

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

Подскажите, как зарегистрироваться на раунд. Нажимаю на сайте кнопку "Зарегистрироваться", меня переводит в мой профиль.

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

Как отправить решение?? Нажимаешь отправить — пишет неправильно заполнена форма) UPD Если понажимать это раз 10 то отправится)

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

After I logged in at 12:00 AM, the web site was showing the tasks of the 1nd qualification round to me. I've clicked "2nd qualification round" in the header and started solving. As it turned out later, this had no effect, so I've wasted some time on tasks from the 1st round. Confused and infuriated, I stopped participating in the round.

Please, move previous rounds to some kind of archive so that it would be impossible to mix those up with the current round.

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

    The same for me. Wasted some time solving task A from the 1st qual.

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

    I wasted 50 minutes solving problems from 1st round. So the contest was during 1:10 for me.

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

Did we have to register before the round to participate in it? I registered just now and can't submit :(

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

Условие задачи Е совсем непонятное.

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

Не могу найти себя в таблице. В поиске по никнейму — 61 место, но на 61 позиции другой человек :)

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

    Может быть несколько человек на 61 месте одновременно, там штрафник с точностью до минуты считается

    P.S. Впрочем, сам только что воспроизвёл этот баг — в поиске я 147, в таблице 145.

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

will there be system testing after contest or the pretests contain everything?

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

Я правильно понимаю, что RCC — единственное личное онлайн-соревнование, в котором семплы принципиально никогда не поясняются?

Upd: а нет, еще SN?S/Яндекс.Алгоритм, извиняюсь.

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

    На Яндекс.Алгоритме совсем недавно в задаче E квала было пояснение.

    Зависит от авторов задач, а не от платформы. Даже если нет специального поля для пояснений — всегда можно их написать в основном условии, было бы желание.

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

Уважаемые организаторы, сайтом вообще невозможно пользоваться. В начале раунда всплывает окошко навроде "Раунд начался, посмотреть задачи". При клике — задачи прошлого раунда, и лишь где-то в уголке написано, что это первый квал, заметить невозможно. КАК так можно было сделать? Хорошо хоть, их нельзя отправить — только так я понял, что что-то не так, спустя n минут контеста.

Далее, при попытке отправить — неправильно заполнена форма. Из одного поля! Причем проблема известна.

Про то, что показ задач неудобный, и говорить нечего:

  1. Чтобы перейти к конкретной задаче, нужно либо найти на огромной странице нужное место (когда все на одной странице), либо n раз кликнуть "следующая", или менять что-то в адресной строке (когда по одной задаче на странице).
  2. После посылки очень "удобно" перекидывает на верх страницы — зачем? Все равно ближайшие 10 минут ждать результата посылки не приходится, надо решать следующую задачу — и тут возвращаемся к первому пункту.

Каждый год одни и те же проблемы (и новые).

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

At first, I started reading a problem from the 1-st round too.

And one other issue. I submitted E and was waiting for feedback. I was chatting with someone and he also was refreshing standings. He saw my WA first and told me about it, but for 1-2 more minutes I wasn't able to see it by myself. I tried refreshing (and hard-refreshing using ctrl+F5) the standings and the page with problems (where I can see my own submissions).

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

Nice sorting.

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

Как решить вторую задачу?

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

    Жадный алгоритм. Всегда принимаем деньги у тех, кто нам больше всего их отдаст. Отдаем тем, кому меньше всего надо. Если в какой-то момент не можем отдать, то заменяем его тем, кому больше всего денег надо отдать. Лучше сливать тех, кто больше всего просит. Всё как в жизни.

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

      Странно, у меня тоже была такая идея . но у меня не прошло

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

        если не можешь расплатиться, то не надо переходить к следующему продавцу. нам выгоднее не платить тем, кто просит больше.

        вместо

        else {
                    if (bankMoney >= b[p2]){
                        bankMoney -= b[p2];
                    }
                    else {
                        ans++;
                    }
                    p2++;
                }
        

        должно быть


        else { if (bankMoney >= b[p2]){ bankMoney -= b[p2]; p2++; } else { ans++; } }
      • »
        »
        »
        »
        8 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        p2++; — вот тут ошибка, двигать позицию нужно только если мы оплатили (из вышеизложенного объяснения — "Если в какой-то момент не можем отдать, то заменяем его тем, кому больше всего денег надо отдать", а у тебя пропускается тот кому меньше всего надо отдавать)

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

        Нет. Ты увеличиваешь p2, если не получилось отдать ему деньги. Но это не оптимально. Лучше оставить как есть, а посчитать, что деньги не отдали тому, кто больше всего их требует.

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

    Жадно. Сортируем покупателей так, что бы сначала шли те, которые дают больше денег, а продавцов наоборот, сначала те, которые требуют меньше денег. А дальше просто симулируем.

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

Как решать Е?

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

как решать D?

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

How to solve D. T-shirts ?

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

    Bitmask DP , let dp(mask , turn) denote the remaining tshirt if mask is the bitmask of all removed tshirts . answer is dp(0 , 0) (assuming 0 is player 1) . Now in each turn player chooses to remove an existing tshirt such that the result of dp is up in the ranks of that player .

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

      You don't even need to include turn into DP state, because turn = bitCount(mask) % 3.

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

      In fact, no need for the 'turn' register, the number of remaining tshirts determines the current player.

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

      We can get rid of turn because it will always equal n — number of bits in the mask % 3 :P

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

      Well, you exactly know, whose turn is it now, but it doesn't really matter, of course.

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

    It can be done greedy with the same complexity as input reading (and actually for any number of people in the team). Let's consider all turns people do in the reverse order. Then for every turn the guy currently making turn will have to cross out the t-shirt with lowest priority in his chart. This can be proven by induction, but it is quite intuitive in a sense that his teammates can leave this shirt out knowing the last guy will HAVE to cross is out. Putting down the main part of my code to clarify (turn is in reverse order, so as p (priority)):

    for(auto v : turn) {
        for(auto u : p[v]) {
            if(!ban[u]) {
                ban[u] = 1;
                break;
            }
        }
    }
    
»
8 лет назад, # |
  Проголосовать: нравится +10 Проголосовать: не нравится

How to solve B and E. Btw I found C and D much easier than B.

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

    if current element is a '+' choose the largest value to add . if its a '-' , consider 2 cases , if the minimum value is <= our current money , then take that else if all values are > current money , take the largest value and sacrifise that.

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

      Woow I am really stupid. I did the same thing but firstly I wrote a brute force which was slow. So I decided to see if it will not get TL if I change all ints to shorts. So I did it with "#define int short". It got WA. Then I came up with your solution but didn't realize that the sum of the numbers can overflow short ...

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

    For B: Sort receive request in descending order and sort send request in ascending order. Then process the value. Then maintain balance and increase balance on receiving and decrease if sending is possible.

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

    Problem E. First, we need to find an intersection of two paths. Its endpoints are found among LCAs of 4 points in the input. If it's empty, the answer is NO. Next, there are 2 cases.

    If testers go in the same direction, the answer is YES if abs(e0 — e1) < longest edge in the intersection, where e0 and e1 — times of entrance into the first node of the intersection.

    If testers go in different directions, we need to check that their time intervals spent at the intersection have a common point and they don't meet in a graph node.

    Everything above can be implemented using binary ascent.

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

Как решать С? Я писал перебор с отсечением.

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

    Пиши перебор когда length(S) < k * (k + 1) / 2 а иначе раздели строку на k строк длины 1, 2, .., k - 1, length(S) - k * (k - 1) / 2.

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

    если длина строки больше k * (k + 1) / 2, то ответ всегда есть: берем делаем различные длины.

    иначе перебор с возвратом.

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

    Если длина строки больше или равна sum(1..k), то можно просто взять строки различных длин. В противном случае строка получается очень короткой — делаем перебор.

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

    Перебор и без отсечений будет заходить)

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

I really can't believe I wrote this code on E without any single bugs, compiled in first time, and got accepted in first time. (I got one WA but I submitted incomplete code for to check my code)

https://ideone.com/bEGBmq

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

    can you explain your logic?

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

      Divide paths two pieces, going up and going down, and check all 4 pairs. When checking one pair,

      If they're going same way and if there will be collision, there will be collision on the longest common edge, too. So we can simply check longest common edge.

      If they're not going same way, there can be at most one collision, find where it is. If it's on a node, there won't be collision, if it's on edge, there will be collision.

      EDIT: By "collision", I mean "both testers were going along that bridge during some non-zero time interval"

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

    I don't get why you "submitted incomplete code for to check your code". What did you expect? You don't know the order of tests so you still can't be sure after getting e.g. TLE (if you were afraid about WA/RTE).

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

      I couldn't believe that I can solve it, there are just 5 minutes, penalty won't be matter, and I'm sure there have to be some bugs so I submitted without checking "collision on node or on edge". Then I submitted it, I realised it's easy to check it, added it to my code and submit again, got accepted. And I got WA on test 5 at first attempt, so I was pretty sure it's because of "collision on node or edge". BTW it's so stupid to do that.

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

Как обычно. Оформление сайта, его функциональность и работа тестирующей системы затмили шикарный набор в задач. На котором участники из топ-20 решили столько же задач, сколько и у тех, кто не вышел в следующий раунд.

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

    А что не так с набором задач? Вы хотите, чтобы обязательно человек на 200 месте решил больше задач, чем на 201? По-моему, очень даже неплохо получилось: 212 человек с 4мя, то есть, 4 задачи почти гарантировали проход. И Е несложная, хотя, конечно, могла бы быть ещё немного попроще.

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

      Думаю, Павел имел в виду, что хотя бы у человека на 20 месте должно быть больше задач, чем на 201.

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

Кстати, никто не заметил, что условие задачи E было изменено после начала контеста?

Исходная версия:

Перед открытием этих мостов для всех необходимо проверить их надежность. Для этого в течение q дней двое рабочих проедут по некоторому пути из одного острова в другой. Каждый из них проедет по своему пути, возможно, начиная в разные моменты времени. Мост считается протестированным в i-й день, если в тот день оба рабочих ехали по нему одновременно в течение некоторого ненулевого промежутка времени. Для каждого из q дней тестирования определите, был ли в тот день протестирован хотя бы один мост.

Изменённая версия:

Перед открытием этих мостов для всех необходимо проверить их надежность. Для этого в течение q дней двое рабочих проедут с фиксированной скоростью 1 по некоторому пути из одного острова в другой. Каждый из них проедет по своему пути, возможно, начиная в разные моменты времени. Мост считается протестированным в i-й день, если в тот день оба рабочих ехали по нему одновременно в течение некоторого ненулевого промежутка времени. Для каждого из q дней тестирования определите, был ли в тот день протестирован хотя бы один мост.

То есть, если открываешь условия в начале контеста и не обновляешь их, о таких вещах нужно догадываться.

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

    Английская версия вообще неадекватная:

    Let's call a bridge tested on i-th day if both testers were going along that bridge during some non-zero time interval.

    И все.

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

How to sort an array of ints (not Integers) in descending order in Java?

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

First time for me — getting AC on the first attempt at Andrew Stankevich organized contest. All previous ones were 3-4 tries at best :)

A went in smooth, B smooth. On C I stumbled — I've got the idea about largest difficult string being 14 letters long. But I still hesitated thinking that 1000 testcases of the same 14 letters long "AAAAAAAAAAAAAA" might be too much for brute force. It wasn't, but I lost lots of time trying to come up with some suffix array / trie / or something else based solution. Stupid of me. With 5 minutes left I read Problem D and it was the easiest problem of the round (in my perception because I like this type of problems). Again I had great opportunity to qualify and missed it (287 place). This is my ... 9th qualification round in RCC, usually placed between 201 and 300 :)

In my local time this contest was at 4:00 am and I went to sleep around 0:00 after re-watching last weeks episode of Game of Thrones :)

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

    When you have a string of length = 15, and K = 5, you have about 15*14*13*12 decompositions, and for 1000 test cases about 33 * 1e6 operations, so it's ≈ 30 times less than 1 sec (≈ 1e9 operations)

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

      That doesn't matter, but your value ( 15 * 14 * 13 * 12 ) is far from true number.

      The actual value is which is 1001. ( 32 times smaller than your value)

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

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

Место в первой квалификации — 56.

Пришло на почту:

We would like to invite you to take part in 2nd qualification round on Sunday, May 29, 12-00 Moscow Time.

Выходит вы будете рады видеть всех.

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

    Тех кто прошел — приглашают, но им будут не рады

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

      Учитывая, что участвовать внеконкурса нельзя — очень не рады.