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

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

Всем привет!)

Сегодня состоится очередной раунд Codeforces #205 для участников из 2 дивизиона. Традиционно, участники 1 дивизиона могут написать соревнование вне конкурса.

Подготовкой задач занимались Игорь Кудряшов (Igor_Kudryashov) и Геральд Агапов (Gerald). Кроме того, выражаем благодарность Михаилу Мирзаянову (MikeMirzayanov) за прекрасный ресурс Codeforces и Марии Беловой (Delinur) за перевод условий задач на английский язык.

Желаем всем участникам удачи, высокого рейтинга и удовольствия от решения задач)

UPD: В раунде будет использована динамическая система оценки задач.

UPD 2: Соревнование завершено, благодарим всех за участие.

Поздравляем победителей:

  1. hos_epic
  2. gzh1996n
  3. I_LOVE_ELE

UPD 3: Разбор задач можно найти здесь

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

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

жалко, что без див 1 :(

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

I will participate.

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

will the scoring system be static or dynamic?

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

Next Round is on Sunday. Awesome!!!

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

Желаю всем повыситься в рейтинге.

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

Если при отправке решения я перепутал её название: хотел отправить решение А, отправил, как С, и получил штраф в 50 баллов, его (штраф) можно как-нибудь предотвратить?

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

    Вы не получили штраф, т.к. неправильный ответ на тесте 1 не считается за посылку.

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

      Спасибо. Конечно я могу ошибаться, но мне казалось, что изначально мне за задачу А дали 442 балла, после чего я попытался её переотправить (дабы улучшить решение) и перепутал А и С, и, наконец, ещё раз переотправил уже нормально, и добился своего. Правильно я понимаю, что штраф за это должен составить 50? (Однако балл уменьшился на 100)

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

        да, штраф за это составляет 50, но Ваш балл уменьшился на 100 из-за того, что с момента первой посылки прошло некоторое время, и стоимость задачи упала

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

Половина решений участников по задаче В посыпалась на 6-м претесте...)

Какой он коварный!

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

The worst round I've ever performed. Sad... T_T

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

На чём ломали А? Что-то всю комнату посмотрел, ни на что не обратил внимания:o

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

Does anyone know what B — test case 6 is about?

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

Как решать D?

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

    Я делал динамой, на каждом шаге считал значение "пробки" (если девушка, то прибавлял, если парень, то убавлял, не уходя в минус) и количество парней, которое, нужно пройти. Ответом будет сумма "пробки" и парней для последней девушки, вот собственно мое решение http://mirror.codeforces.com/contest/353/submission/4736196

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

    Я решал так: будем идти с конца строки в начало поддерживать количество девочек и время "простоя". Количество девочек равно количеству букв 'F' справа от текущей позиции, а время "простоя", числу, которое равно времени, которое должен подождать мальчик, чтобы начать меняться с девочками. Это число вычисляется следующим образом:

    • если s[i] = 'F', то уменьшим время "простоя" на 1, так как с этой девочкой можно будет поменяться и не ждать;

    • если s[i] = 'M', то увеличим время "простоя" на 1, потому придётся подождать, покуда этот мальчик пройдёт вперёд.

    Также нужно учесть, чтобы время простоя не опускалось ниже 0(когда отнимаем, время = max(время — 1, 0)) и то, что не нужно увеличивать время "простоя", если спереди нету девочек.

    Ответ будет равен max = (количества девочек + время простоя) для каждого мальчика.

    Вот решение: http://mirror.codeforces.com/contest/353/submission/4731757.

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

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

    ans = max(ans + 1, i - cnt);
    cnt++;
    

    Где cnt — это количество девочек, ans — ответ для префикса.

    Почему это работает? Как только мы дошли до девочки, ответом для пройденного префикса станет время, когда эта девочка встанет на место (т.к. все девочки, которые слева уже будут на месте). Следовательно мы имеем два случая:

    1. Текущая девочка догонит предыдущую, т.е. она встанет на свое место на секунду позже предыдущей.

    2. Текущая девочка не догонит предыдущую, тогда она встанет на свое место за количество людей между ее текущей позицией и конечной позицией.

    Код

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

thanks for this great contest .......!!

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

What is the intended solution for E?

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

Задачи просто КЛАСС...!!! Спасибо авторам...!!!

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

It was fastest system testing i've ever faced on Codeforces.

Whole system testing phase just took 8 minutes. Codeforces Rocks!

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

very good and fast system testing today! :)

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

First time I solved 4 problems during a contest on codeforces :-D

I'm happy although it's unrated for me :-) Thank you for preparing this contest!

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

Что за тест 31 в задаче C? Что там такого, что не отсеклось на более коротких тестах?

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

I joined late , problem C is very interested .. isn't it guys ?

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

How solve the problem B??

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

    You can solve B with greedy assignment of the blocks.

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

    My solution: 4730199

    Idea:

    To solve problem B, you should put the number in balance (n numbers to heap 1 and n numbers to heap 2), to make the number of distinct 4 digit number maximum, if there are same number, say there are i number x (i>1, if i=1 it considered unique number that will be processed later), you should put (i div 2) number x into heap 1 and (i div 2) to heap 2, and if there are remainder (i is odd), save to heap 3 temporaryly (will be processed later).

    After that process the rest unique number (i=1) into heap 1 and heap 2 equaly, if there are j unique number, put (j div 2) to heap 1 and j-(j div 2) to the heap 2. And then the rest (heap 3) will fill heap 1 and heap 2 until full (have n numbers each, the order isn't important)

    Finally count the distinct number in heap 1, save to variable a and heap 2 to variable b, and the total distinct 4 digit number is a*b. and then just print the output.

    If there are more simple solution I would like to know :-)

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

Как решать С?

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

    Заметим: что если у нас есть маска 00101111 мы можем её превратить в 11001111 или в 11101111, т.к эти числа будут меньше исходного. Теперь можем идти по маске, если встретили ноль, то ничего не делаем, если встретили 1, то приводим к виду описанному выше и считаем сумму. Как посчитать сумму быстро. Для части левой от нуля можно подготовить массив сумм на отрезке от a0 до ai. Для правой части можно в самом начале посчитать в лоб и потом по мере прохождения по единицам убирать слагаемое из суммы. Код: http://mirror.codeforces.com/contest/353/submission/4736930

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

Lot's of DP problems. Love that contest though i miss A for some silly mistake. :( (Y)

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

Что-то странное творится, такой код локально работает мгновенно, а на ideone и тут в запуске TL'ится.

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

Any ideas of around when the tutorial will be published?

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

Раз ещё не спросили, буду первым.

Расскажите, кто-нибудь, пожалуйста, как решать Е.

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

    Я решал так — сначала найдем две одинаковых цифры подряд. Если такого нет, то все стрелки чередуются, поэтому ответ — n/2. Если же нашли, то начиная с этого места добавляем к итогу единичку либо за каждый "длинный" (более одной цифры) ряд из одинаковых цифр, либо за каждую пару разных одиночных цифр.

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

Awesome round. It is always a surprise when scoring goes dynamic. #Enjoyed. Looking forward for more matches of this kind.

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

nevermind

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

it was a awful contest!!!

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

У меня есть ощущение что авторское решение по Е неверно.

Судя по всему, оно на тесте 011001 выводит 2, а на тесте 101100 — 3, хотя ответ должен быть одинаковым, т.к одна строка- циклический сдвиг другой.

Точнее, это касается ухудшения моего решения с контеста. Решение на контесте не зашло, ухудшение — зашло.

Все, я дурак, извиняюсь.

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

Стыдно просить, но подскажите пожалуйста идею решения задачи A(код участников смотрел, все равно не понимаю)

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

    Считаешь количество костей, у которых только одна сторона нечётная (достаточно хотя бы одну такую найти).

    Считаешь суммы нижних и верхних значений костей.

    Если обе суммы чётные — нечего делать, возвращаешь 0.

    Если одна из сумм нечётная — исправить невозможно, возвращаешь -1.

    Если обе суммы нечётные — проверяешь наличие фишек, у которых только одна сторона нечётная.

    ____Если таковые имеются — достаточно эту одну фишку перевернуть, возвращаешь 1.

    ____Если таковых нет — исправить невозможно, возвращаешь -1.

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

      Ну а если не думать, то можно написать динамику dp[i][s1][s2] — сколько переворачиваний надо сделать среди первых i доминошек, чтобы четность сверху была s1, снизу s2. Чтобы не упустить каких-то вариантов.

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

It is 70 minutes after the contest now and ratings are not published yet...

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

how the system testing is so fast and the rating is so slow? Isn't harder to judge than to update the rating? Maybe I'm wrong, but it would be nice to know.

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

wrong answer The number of cubics in first heap must be equal to 50, but it equals 54

Я все,конечно,понимаю,но при этом вариант,который выдает моя программа дает тоже 1936 вариантов. Так в чем проблема,можете обьяснить? (тест 6) Задача Б

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

dynamic scoring and dynamic problems ! thank you

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

dynamic scoring system and dynamic problems ! thank you

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

Update: The original comment is my mistake.

(353B - Two Heaps, test 6)
I think Problem B judgement is wrong (the checker issues false negatives for some valid solutions).

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

shit E. Antichain