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

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

Привет всем!

Рад приветствовать вас на очередном, 94, раунде Codeforces. Надеюсь, что несколько более раннее время проведения раунда не скажется отрицательно на ваших успехах =)

Автором задач сегодняшнего раунда являюсь я, выпускник СПбГУ, Валерий Самойлов. Это мой второй раунд на Codeforces. Надеюсь, что сегодня никто не пожалеет о своём участии. Большое спасибо RAD, который оказал неоценимую помощь при подготовке задач. Также спасибо Марии Беловой, переведшей условия на английский язык.

В этом раунде будет необычная разбалловка:

Див-1: 1000 - 1500 - 1500 - 2000 - 2500

Див-2: 500 - 1000 - 2000 - 2500 - 2500

Прошу не пугаться, все не так уж страшно =)


Раунд завершен, всем спасибо за участие!

Разбор ожидается завтра.

Победители:

Дивизион 1:

1. Egor

2. Gassa

3. dzhulgakov

4. Zhukov_Dmitry

5. tourist

6. tomek

7. LayCurse

8. a9108

9. Sereja

10. ftiasch

Дивизион 2

1. stx2

2. lovro

3. exod40
  • Проголосовать: нравится
  • +160
  • Проголосовать: не нравится

12 лет назад, # |
  Проголосовать: нравится +10 Проголосовать: не нравится
Всем удачи, а автору заранее спасибо за задачи =)
12 лет назад, # |
  Проголосовать: нравится -56 Проголосовать: не нравится
Ну за что? Ну почему? Контест в 10:00 по москве, а как писать людям в Ебурге, Уфе... у меня вообще школа...
  • 12 лет назад, # ^ |
      Проголосовать: нравится +24 Проголосовать: не нравится
    Очень сожалею, что Вы не сможете принять участие.
    • 12 лет назад, # ^ |
        Проголосовать: нравится -22 Проголосовать: не нравится
      Сожалеть тут о не о чем, просто многие не смогут написать этот контест, ибо многие утром спят/учатся, поэтому все таки лучше устраивать контесты по вечерам...
  • 12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    При особом желании это не помеха, как у нас в Александрии...
  • 12 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +9 Проголосовать: не нравится

    а есть такие, которые живут в сибири, и контест после полуночи для них тоже очень тяжкий... где компромисс? так, что я считаю, всё нормально, всем удачи))

  • 12 лет назад, # ^ |
      Проголосовать: нравится +12 Проголосовать: не нравится
    У некоторых сейчас вообще сборы к ВКОШП, поэтому утренняя тренировка очень даже кстати :)
  • 12 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +11 Проголосовать: не нравится

    А как  писать людям, у которых 4 утра когда в МСК 19-00?!

    • 12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      a kogda v Moskve contest v 21:00 u nas v 23:00 i do 2 nochi no my pishem!
      • 12 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        мб до часу?)
        • 12 лет назад, # ^ |
            Проголосовать: нравится +15 Проголосовать: не нравится
          Кто-то реально может лечь спать не дождавшись результатов систеста? Это железную волю надо иметь :)
        • 12 лет назад, # ^ |
          Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

          Просто ещё час уходит на судорожное смотрение на результат тестирования своих решений, судя по всему :)

12 лет назад, # |
  Проголосовать: нравится +27 Проголосовать: не нравится
Ну ладно! От ненаписанного контеста никто не умирал(надеюсь)! Всем удачи! Желаю всем хорошего коденья вместе с завтраком и утренним кофе...
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Надеюсь проблемы не будет во время контеста!
12 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится
Я в колледж не пошел ради контеста=). Всем удачи!
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Интересно, а разбалловка стандартная?
12 лет назад, # |
Rev. 2   Проголосовать: нравится +20 Проголосовать: не нравится

It's a comfortable time for me, 2PM in China.

12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Looking forward~~~~~~~~
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Зомби открыл галаза.... Уф... проснулся... Полчаса на включение мозга... :)

Всем удачи на предстоящем контесте :)
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
That's all right.
12 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Всем удачи решенных задач и высокого рейтинга

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

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

И всем удачи на контесте=) 

  • 12 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится
    Эм.... Я вообще регистрировался ещё вчера, после чего был здоровый сон на часов этак 8, т.е. возможности зарегаться было больше чем достаточно на мой взгляд :)
    Yt
12 лет назад, # |
Rev. 2   Проголосовать: нравится +16 Проголосовать: не нравится

Последние изменения: добалено запостивание в ВК, FB, Twitter и LJ; убрана кнопка оставить комментарий внизу страницы; добавлена сортировка по рейтингу среди зарегестрировавшихся на контест! Классно... вроде немного, а чувствуется, что что-то делается, причём делаются приятные вещи.

UPD. Странно, что совсем новички имеют рейтинг 0, вроде бы он 1500?

  • 12 лет назад, # ^ |
      Проголосовать: нравится +17 Проголосовать: не нравится
    Ещё, вроде, только недавно появилась возможность просматривать список посылок отдельного участника (с его страницы по ссылке "попытки").
  • 12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    1500 он становится с  первой посылкой
  • 12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    А я негодую по поводу "убрана кнопка оставить комментарий внизу страницы". Куда теперь надо листать чтобы сразу ответить в тему, дочитав комментарии до конца??

    Извращенские варианты типа "жми home, а потом pg dwn пока не закончится тема и начнутся комментарии" не предлагать!
    • 12 лет назад, # ^ |
        Проголосовать: нравится +16 Проголосовать: не нравится
      Практика показала, что очень многие ошибаются - нажимают ее вместо ответить. И негодуют.
      • 12 лет назад, # ^ |
          Проголосовать: нравится +8 Проголосовать: не нравится
        Ошибутся раз, два. Привыкнут.
        А что делать тем, кто уже привык и не знает, как в тему теперь отвечать? :)

        Думаю можно каким-либо образом оставить возможность писать комментарий снизу и сделать так, чтобы отличалось от "Ответить".
        • 12 лет назад, # ^ |
            Проголосовать: нравится +6 Проголосовать: не нравится
          Можно кроме home ещё endом пользоваться
          • 12 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Ну да, но зачем нам теперь end, если сейчас там нельзя оставить комментарий к посту?
          • 12 лет назад, # ^ |
            Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
            wrong thread posting f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f u u u u u u u u u u u u u u u u u u u u u u ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

            Какое-то злбное утро получилось)
      • 12 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        А нельзя сделать возможность удалить своё сообщение? Например, если у него ещё нет +- и нет ответов на него. Правда, вероятно, это не так просто реализовать.
12 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится
comfortable 100% 7AM :)
12 лет назад, # |
Rev. 2   Проголосовать: нравится +13 Проголосовать: не нравится

Delayed 10 minutes?!

I have college after it ends with 30 minutes, now it become 20 minutes :\ Hope I could make it on time!

12 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
О, перенос на 10 минут. Спасибо большое! Мне как раз их не хватало для удобства) А то в 5 минут пара заканчивается только))
  • 12 лет назад, # ^ |
      Проголосовать: нравится +68 Проголосовать: не нравится
    Сервер: "— Ну ещё десять минуток только посплю..."
    • 12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Ох я бы и сам ещё минуток 10 поспал бы.... :)
      • 12 лет назад, # ^ |
          Проголосовать: нравится +6 Проголосовать: не нравится
        Да нам в Беларуси грех жаловаться) Почти до 9 утра можно было спать. Я вообще по привычке в 7 встал.
        • 12 лет назад, # ^ |
            Проголосовать: нравится +2 Проголосовать: не нравится
          Ну я просто в последнее время что-то слишком поздно просыпаюсь, потому на всякий случай будильник ставил на 8, чтобы точно мозг включить за час. А вообще - хоть проснулся пораньше, больше чего за день сделаю :)
          • 12 лет назад, # ^ |
              Проголосовать: нравится +5 Проголосовать: не нравится
            А я, честно говоря, боюсь контест утром писать. Даже хоть и встал 2 часа назад. Как-то они нехорошо заканчиваются обычно, не умею я думать утром)
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
эх, десятинка... =)
12 лет назад, # |
  Проголосовать: нравится +32 Проголосовать: не нравится
4AM in Brazil. Not so comfortable.. but here we are! :D
12 лет назад, # |
  Проголосовать: нравится +34 Проголосовать: не нравится
6AM here. You are teaching me to live a more healthy life.
12 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
Возможно сегодня учистников в рейтинге станет 10000!
12 лет назад, # |
  Проголосовать: нравится +13 Проголосовать: не нравится
It is 9:30 AM in Iran. But it's interesting that today is holiday :)
12 лет назад, # |
Rev. 2   Проголосовать: нравится -38 Проголосовать: не нравится

Зачем такие сильные претесты в Div1A (Div2C)?
Совсем с ума посходили что ли? Что хакать то тем, у кого с утра ничего не придумывается? %)

  • 12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    У меня не было проблем  претестами.
    А какие там особые случаи?
12 лет назад, # |
Rev. 2   Проголосовать: нравится -8 Проголосовать: не нравится

чорт... нашел кривое решение и не успел сделать взлом =_=

upd. хм... оно прошло все тесты. но, тем не менее, оно валится.

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

Very nice problems!

12 лет назад, # |
  Проголосовать: нравится -10 Проголосовать: не нравится
Nice problem set.
My mind is fully shaken. :)
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Вам не кажется, что взломов маловато сделано?
12 лет назад, # |
  Проголосовать: нравится +16 Проголосовать: не нравится
По моему D и С в разы проще чем B. =)
  • 12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    А как В решалась? 
    • 12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Попробую написать чтобы было понятно:

      Построим суфф. масс. с LCP. Это можно сделать за время N lg N. После чего заведем 2 указателя и текущую длинну подстроки. Первый - указывает на подстроку с наименьшим суффиксом из тех что ещё не рассмотрены полностью. Второй - текущий рассматриваемый суффикс. Тогда возможны следующие переходы:

      1) LCP >= Len, тогда у нас есть ещё 1 такая подстрока и можно уменьшить k и рассмотреть следующий суффикс.

      2) LCP < Len. Значит следующий суффикс начинается с подстроки большей чем мы рассматриваем, поэтому начнем рассматривать строки длины Len+1 начиная с beg

      3) Суффикс короче чем Len. Тогда очевидно, что и все суффиксы что и раньше его уже рассмотрены и тогда можно подвинуть beg и len положить равным LCP + 1 (в силу того что это минимальная из нерассмотренных подстрок).

      Эта часть делается за O(N+K). Ну и ещё вначале проверяем чтобы решение существовало. Итого за O(N Lg N + K) решили задачу.

      • 12 лет назад, # ^ |
          Проголосовать: нравится +31 Проголосовать: не нравится
        Не пугайте людей, она решалась гораздо проще. Это же В.
    • 12 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится +8 Проголосовать: не нравится

      у меня такое решение

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

      теперь само решение: пусть у нас есть куча с минимумом (грубо говоря set в C++). сначала сложим туда все подстроки длины 1 (причем подстроки мы храним как 2 индекса - начало и конец). далее выполняем k раз операцию: извлекаем минимум из кучи. если то, что мы извлекли (скажем, [i..j]) - не суффикс нашей строки, то ложим в кучу [i..j+1].

      нетрудно понять, что мы извлекаем из кучи все подстроки в лексикографическом порядке, значит на k-й раз мы вытащим ответ. размер кучи всегда не больше n, значит решение работает за O((n+k)*logn*logn) (первый logn - это для кучи, второй для сравнения подстрок).

      • 12 лет назад, # ^ |
          Проголосовать: нравится +3 Проголосовать: не нравится
        Я в контесте не участвовал, но задачу решил в точности также. Странно, но проходят решения без хеша, то есть то тоже самое, но с сравнением строк за O(n). На макс тесте abbbb....abbbbbb... где вторая "a" стоит посередине, такое решение будет работать n^2. тесты слабоваты против такого, казалось бы очевидного решения. Надеюсь такое читерство ни у кого не прошло.
    • 12 лет назад, # ^ |
        Проголосовать: нравится +1 Проголосовать: не нравится
      Можно просто наращивать строку, которую ищем в тексте, увеличивая ее длину и запоминая все начала ее вхождений. Простой рекурсивный спуск с перебором, какую букву поставить на последнее место. Сложность - 26*k, поскольку все вхождения строк учитываются.
  • 12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    В B нет необходимости писать что-то суффиксное. Тот факт, что k<=10^5 добавляет очень простое решение.
    • 12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      можно узнать идею простого решения?
      у меня решение на хэшах, про попроще будет суффиксных структур данных, но все равно не очень простое.
      • 12 лет назад, # ^ |
          Проголосовать: нравится +24 Проголосовать: не нравится
        Раасмотрим все буквы: a, b, c, ..., z. Про каждую из них легко узнать, сколько подстрок с неё начинаются. Таким образом, легко узнать первую букву. Дальше таким же образом можно узнать вторую букву, и т.д. Несложно доказать, что это будет работать не за квадрат.
        • 12 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Написал по такому же принципу - WA50
          • 12 лет назад, # ^ |
              Проголосовать: нравится +3 Проголосовать: не нравится
            У меня WA50 - забыл, что количество строк, начинающихся с заданной буквы надо считать в long long.
        • 12 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Согласен, красивое решение, но придумывание идеи + написание по моему мнению сложнее чем в C или в D по обоим критериям.
        • 12 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          м... красиво. спасибо))
          сейчас попробую доказать почему это не квадрат...))
          • 12 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Потому, что мы на каждом шаге вычитаем 1 из индекса
        • 12 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Можно поподробнее, как узнать вторую букву?
          • 12 лет назад, # ^ |
              Проголосовать: нравится +3 Проголосовать: не нравится
            Так же, как 1ю, но валидные позиции уже только те, перед которыми правильная 1я буква
    • 12 лет назад, # ^ |
        Проголосовать: нравится +12 Проголосовать: не нравится
      да-да, на то и был рассчёт.
    • 12 лет назад, # ^ |
        Проголосовать: нравится +3 Проголосовать: не нравится
      Я думал в этом направлении... Но всё же как-то не придумалось... А тут главное не запутаться при написании. =)
12 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится
Very nice problem set... Just 20 seconds more and would have submitted E as well. Took me a whole while to realize answer is simply (n - 1) choose (2 * k) * (m - 1) choose (2 * k)
  • 12 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится
    Your idea is cool! It's, choose k pairs of brackets from the n-1 gaps, C(n-1, 2*k). Nice solution with Python.
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Все-таки правильно я сделал, что получив WA4 по задаче Е подумал, что ну ее на фиг, и пошел делать взломы
  • 12 лет назад, # ^ |
      Проголосовать: нравится +12 Проголосовать: не нравится
    Да ну тебя - мы надеялись, что её хоть кто-нибудь сдаст.
    • 12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Ну я понятия не имею, как в этом багу искать. Теоретически решение совсем простое, а вот нахождение прямой, которая пересекает как можно больше кругов - та еще развлекуха. Дали бы n = 100, если бы хотели, чтобы кто-нибудь точно решил
      • 12 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Так в этом-то вся и задача! Всё остальное не тянет на Е. А ты точно искал или итерационно?
        • 12 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Я понял, где у меня бага - я просто совершенно другую функцию считал :)
          Я искал точно - поворачиваем направление, смотрим, какие правые концы проекций перестали лежать в каких кругах. Я, правда, полный бред в итоге там искал - но это просто спать надо было больше.
          А насчет "это тогда не Е" - так весь контест состоял из 4х С и этой задачи ;)
          • 12 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Было бы логично, если бы и она была С, ты про это?
            Ну нет, всё-таки А была никак не выше, чем В.
            Напиши с правыми концами и ищи следующую багу =) Или я неправильно понял, какие проекции и где их правые концы.
            • 12 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              Я про то, что все остальные задачи по сложности - С. Не важно
              Решение такое - спроецируем все круги вдоль случайного направления. Найдем для каждого правого конца в скольких кругах он строго лежит. Теперь будем вращать направление вплоть до следующей касательной (мы запоминаем все направления, которые соответствуют касательным к любым 2 кругам, причем для одного из кругов это должна быть "правая" касательная, а при сортировке мы сначала кладем "выходы", а потом - "входы") и вычитаем из соответствующего правого конца, если выход и добавляем, если вход. Ну и максимум ищем.
              • 12 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится
                То есть, исследуются моменты, когда один круг входит в другой или выходит из него.
                Интересное решение. Авторское другое и, кажется, несколько проще.
    • 12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      А какая в E правильная формула, если мы знаем C (количество кругов, пересекаемых одной прямой)?
      • 12 лет назад, # ^ |
          Проголосовать: нравится +8 Проголосовать: не нравится
        bananaCount + (C - 1) * cutCount + cutCount * (cutCount + 1) / 2
        • 12 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Понятно. Я идиот. Забыл прибавить бананы, которые мы не пересекли. Теперь Accepted.
          • 12 лет назад, # ^ |
              Проголосовать: нравится +8 Проголосовать: не нравится
            Обидно блин. Ещё один человек забыл про лонги и тоже получил бы АС, если бы не это.
    • 12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Чёрт, я вывел ответ с %lld... :(
      • 12 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        а без lld ОК?
        • 12 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Да =/
          • 12 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Кстати, а откуда такая простая формула берется?
            • 12 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              В разборе будет доказательство)
            • 12 лет назад, # ^ |
                Проголосовать: нравится +9 Проголосовать: не нравится
              Каждая прямая добавляет по одной части к бананам, которых она пересекает +по одной части к каждой точке пересечения с другими разрезами внутри бананов.

              Очевидно, что можно сделать так, чтобы все разрезы пересекались в одном банане и при этом были в общем положении. Отсюда и следует эта формула.
  • 12 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится
    Похоже на то ;) .

    Хотя... в E у tomek, dolphinigle и Endagorion один и тот же ответ с WA на тесте 13, теоретически может оказаться, что правы они, а не жюри. Тест маленький, скоро узнаем ;) .
    • 12 лет назад, # ^ |
        Проголосовать: нравится +15 Проголосовать: не нравится
      Не надейтесь, у жюри всё правильно ))
      • 12 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Да, жюри имеет обыкновение так думать.
        Иногда оказывается, что зря =) .

        Ты можешь на пальцах доказать свой ответ на тесте 13?
        Или, скажем, уменьшить k на нём в 10 000 раз и доказать?
        Или объяснить, на что этот тест?
        • 12 лет назад, # ^ |
            Проголосовать: нравится +12 Проголосовать: не нравится
          Да я только что проверил на калькуляторе.
          Этот тест на то, что прямая может проходить через три круга только чуть-чуть, едва-едва. Ваши решения, видимо, сочли, что она не проходит вовсе. Да нарисуй эти три круга и все станет ясно.
          • 12 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Да, возможно: в этих трёх решениях в разных местах eps = 1E-10, 1E-9, 1E-9. А сколько надо для таких ограничений на координаты?

            С другой стороны, на этом тесте даже 1E-6 должно было хватать.
            • 12 лет назад, # ^ |
                Проголосовать: нравится +3 Проголосовать: не нравится
              Я пробовал в авторском менять EPS от 1E-8 до 1E-11, оно остается правильным. Других EPS оно не использует.
            • 12 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              Я написал с 1e-9, RAD. тоже. Дело может быть в слишком большом количестве вычислений или итерационных методах.
        • 12 лет назад, # ^ |
          Rev. 4   Проголосовать: нравится 0 Проголосовать: не нравится

          Судя по тому, что у e-maxx теперь ОК - я верю в правильность результатов :)

    • 12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      С другой стороны, 13й тест явно не последний. Посмотрим. А по D явно можно было очков набрать - так что я сыграл safe
12 лет назад, # |
Rev. 2   Проголосовать: нравится +15 Проголосовать: не нравится

A good point of the contest was brief problem statements.

12 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
I really need to learn that suffix-array thing. n^2*logn didn't play well with n=10^5 :-)
  • 12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Bruteforce can pass it.
    • 12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Please elaborate , i thought nothing other than something like suffix array can solve it .
      • 12 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Use priority_queue. Very easy idea, wish I had thought of it when I was coding on the competition. Instead I wrote something similar but got WA10.

        http://codeforces.com/contest/128/submission/870700
        • 12 лет назад, # ^ |
            Проголосовать: нравится +1 Проголосовать: не нравится
          Have you tried 100000 numbers of a and 100000 as input?I find the input data of System Test is not strong enough....
          • 12 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Yes I have. It took 0.533000s on my PC to finish. If you think about it it isn't very hard test case. I will put all strings of length 1 in the priority_queue and then I will remove all of them and insert all strings of length 2. That is O ( K * log2 ( N ) ).
            • 12 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              My priority_queue size is always N ( when I pop front element I push some element on the priority_queue ) and I perform K operations on it. So my solution have time O ( K * log2 ( N ) ) on every test case.
      • 12 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Idea is to use a priority queue. For example

        abc, 5. You will do the following:

        Push ("a", 0), ("b", 1), ("c", 2) on the heap. You will then pop the first element ("a", 0). Because 0 + 1 < size (3), you now push ("ab", 1) on the heap, and so on.

        Do this k-1 times and the top most element of the heap is the sought after substring.

        This gets AC. I'm not sure if you can construct a test case in which the comparison for the heap will make it too slow. I tried with aabbbbb...b and 10000, which should be very bad because all comparisons will be strings like aabbbbb and aabbbbbb, but it ran way fast enough.

        • 12 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          And now I read that it should be k < 10^5. It still runs within time, but it's somewhat close :P
    • 12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Arg, you are right. That's only k*log(n).
      I hate when I overthink problems :-)
      • 12 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Hm, times the length of the longest considered substring. I'm not sure how to get a good bound on that.
12 лет назад, # |
Rev. 3   Проголосовать: нравится +5 Проголосовать: не нравится

Any ideas in problem D?
My approach is greedy. First, create a circle min, min+1, min+2,...,max,max-1,max-2...,min+1. Then check if it's possible to pair the rest numbers such that every pair consists of consecutive numbers since these pairs can be consistently added into the initial circle.

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

    I liked this problem enough to write a blog post about it: http://codeforces.com/blog/entry/3196. It has a "proof" for a greedy solution similar to what you describe. Hope you find it useful!

  • 12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Look at the histograms.  For a circle "min, min+1, min+2,...,max,max-1,max-2...,min+1", the histogram is 1 2 2.... 2 2 1.

    There's a solution if the histogram is a sum of histograms of overlapping circles.

    You can modify the circles greedily until each one is empty:  Pick one the circles on the left side.  Remove two pieces of the circle so that the min value is increased by one.  In the histogram, it means removing 1 to the two leftmost bins.  That's implemented in this solution .
  • 12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    My gredy solution works as follows:

    let a1, a2 be the value of the biggest and second biggest value (without duplicates). Let c1, c2 be their associated counts. If c2 >= 2 we can "merge" an a1 with two a2s creating a segment: a2, a1, a2. This can now be seen as one a2, so we decrease c1 and c2 by one.

    The base case is when a2 is is also the smallest value (only two values). In this case c1 must be equal to c2.

    At all points we must have a1 - a2 = 1.

12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Very nice problem set. :)
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
А почему пользователь ZKirill участвовал вне конкурса?
Или его участие было вызванно ошибкими авторизации?
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

В задаче  D  слабые тесты. Проходит решение которое выдает YES на тест:

6
2 2 3 3 3 3 

Я из-за этого сделал ре-сабмит, но оказывается что мог не делать

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

А в D - почему неправильно делать так: брать минимум и максимум, удалять их, и говорить, что мы сейчас сделаем из них цикл, поэтому все числа между ними мы удаляем по два раза. И всё это завернуть в while (есть хотя бы одно число).

Т.е. мы так находим несколько циклов, которые можно склеить в один большой цикл - ответ.

  • 12 лет назад, # ^ |
      Проголосовать: нравится +20 Проголосовать: не нравится
    Это я тебя свалил, если ты не заметил
    Тест был такой:
    16
    1 2 2 2 3 3 3 4 4 5 5 5 6 6 6 7
    После первого удаления оставшиеся куски не обязаны быть связными
12 лет назад, # |
Rev. 4   Проголосовать: нравится +1 Проголосовать: не нравится

The Div 2 D.string
I use STL heap.

This is my code,it got TLE

if (P.top().pos<=len) P.push(Node(P.top().pos+1,P.top().s+S[P.top().pos]));



If turn to this can AC

Node tmp=P.top();
if (tmp.pos<=len) tmp.s+=S[tmp.pos++],P.push(tmp);


it really have big difference?
Is construct function make it slow,or access top(),or else?
  • 12 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
    For test abbbbb....b and k = 100000, it will create strings of total size k2 / 2. 
  • 12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    There are weak tests, try to run your solution on test abbb...(50 000 times letter "b")....abbbbbbbbb...  (40 000 times letter "b"). your solution is wrong anyway, it must got TLE.
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
can anyone explain solution of "String" using suffix array? I solved it with suffix automata, but have no idean about array. Thx in advance


// лучше по-русски
12 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Это первый контест, который я писал на работе, и если бы не отвлекали... :)

12 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится
Can someone explain the solution for Problem C (Div 1) in detail?
  • 12 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится
    First, note that the two dimensions are independent, so we can reduce this to a 1-dimensional problem. So we start with some value n and want to pick k intervals each of which is strictly contained in the previous one. The number of ways to do this is just C(n - 2, 2k) because for any choice of 2k values in the range [1, n - 1] we can take the min/max to be the first interval, next min/max to be the second interval, and so on.
    • 12 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      I still don't understand your explanation, can you make it more clearly? First, why the two dimensions are independent. Second, why is C(n-2,2k), where comes the 2k?


      By the way, your rating diagram is really fantasitc!
      • 12 лет назад, # ^ |
          Проголосовать: нравится +5 Проголосовать: не нравится
        Sure. We can think of them as independent due to the following argument. Let's say we have two sequences, one for each dimension, e.g.

        [0, n], [1, n - 1], ...
        [0, m], [2, m - 1], ...

        which represent the left/right bounds and top/bottom bounds of the box at each of the k steps, respectively. So the first box is obviously (0, 0) to (n, m) and the second is (1, 2) to (n - 1, m - 1). We observe that for any two sequences of the left/right bounds and top/bottom bounds we get exactly one sequence of boxes. It suffices then to count the number of such sequences and multiply them together.

        To count the sequences, we look at just one of the sequences above, e.g. [0, n], [1, n - 1], [3, n - 2], ... and rewrite it "in order" like this: 0, 1, 3, ..., n - 2, n - 1, n. We know that 0 is always at the start and n is always at the end and there are exactly 2k values from 1 to n - 1 (two for each of the k intervals). Moreover, for any 2k values in [1, n - 1] we can uniquely construct the k intervals by taking the outermost values to be the first interval, then the next outermost to be the second, etc. For example: 0, 3, 4, ..., n - 3, n - 2, n becomes [0, n], [3, n - 2], [4, n - 3], ....

        Thus we have a one-to-one correspondence between such sequences and sets of 2k values in the interval [1, n - 1] of which there are C(n - 2, 2k).
        • 12 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Thank you for your explanation, that's really amazing, I understand and finally get an AC ^_^. Now I solved all the problems in #94 div 2. It feels good.
    • 5 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      There's just a slight mistake in your formula. It is supposed to be C(n - 1, 2k) since there are n - 1 different values in the interval [1, n - 1].

12 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится
Я единственный не прочитал в условие задачи C, что следующий прямоугольник вписывается в предыдущий, а не в изначальный? 
  • 12 лет назад, # ^ |
    Rev. 4   Проголосовать: нравится 0 Проголосовать: не нравится

    Наверно, единственный.

    UPD. Нет, судя по плюсам и ответу, не единственный)

  • 12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Я сначала тоже не так прочитала, но задача получалась слишком сложной, пришлось поднапрячься и все-таки осилить условие.

    Но я и в A не прочитала с первого раза, что Маша умеет по диагонали ходить.

    А что делать, ранний контест, 10 утра %)
  • 12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Я прочитал так. Забил, написал D. Потом двумя способами написал B. В итоге вернулся и с третьей попытки прочитал условие правильно.
  • 12 лет назад, # ^ |
      Проголосовать: нравится +7 Проголосовать: не нравится
    Я тоже не так прочитал. После того как я понял что та задача над которой я думал скорее всего не решается на таких ограничениях я решил перечитать условие)) Я ещё умудрился не заметить в D что числа по кругу((
12 лет назад, # |
  Проголосовать: нравится +2 Проголосовать: не нравится
It was a standard problem set. Nice. Waiting for editorials. Thank you
12 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Tourist's solution on div1 problem A?


He wrote a non-recursive solution on this problem?

Can somebody explain the algorithm?


  • 12 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится
    Apparently he is checking where M can be after several moves.
    • 12 лет назад, # ^ |
        Проголосовать: нравится +5 Проголосовать: не нравится
      thx,  why did he use i+it-1 and i+it?


        xk:=i+it-1;
                yk:=j;
                if (xk > 0) and (yk > 0) and (xk < 9) and (yk < 9) then ncan[xk,yk]:=False;
                xk:=i+it;
                yk:=j;
                if (xk > 0) and (yk > 0) and (xk < 9) and (yk < 9) then ncan[xk,yk]:=False;
      • 12 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        I think he checked whether the statue would be in certain position on this or next move.
  • 12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    You can use DP with state x, y, #moves.

    You win iff you can survive 8 moves.

    Then for each mem[x][y][cmove] you need to check if there's a rock in the cmove places above (it would move on you, so you die) or if there's a rock cmove-1 places above (it would be there when you tried to move, so invalid move).

  • 12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Obviously, it's not necessary to check whether you can reach Ann, the only thing to do is to check is any state reachable after 8 moves as all statues disappear after 8 moves.
    So, you can calculate isreachable(step, x, y) the following way: if now we are at step S and in point (x, y)  your simply check if the point (x + dx[i], y + dy[i]) is free of statues and no statue will move there after this step ( can be calculated in O(1). After all, if any isreachable(8, i, j) is true, you win, otherwise you lose.
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
How can I download a complete test case? I need to know what is test case 50 in problem B DIV1.
  • 12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Seems like you cant. But someone have problems with 50 test and he solved it with using int64 to calc string count.
  • 12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    I had WA50 because i kept total number of strings beginning with certain letter in int. Changing to long long solved this problem.
    Looking at your code, i see suspicious line int xx = sum[t][i]. May be problem is there.
    • 12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Yes it's. :( I wrote this line to debug something, but the sum array itself is long long. :(
12 лет назад, # |
  Проголосовать: нравится +18 Проголосовать: не нравится
Can anybody tell me how to solve the problem E in div 1?

many thanks.
  • 12 лет назад, # ^ |
    Rev. 3   Проголосовать: нравится +58 Проголосовать: не нравится

    If there were only one banana, then the answer would be 1 + K * (K+1) / 2  (it's easy to construct such a placement of lines, where each line intersects all previous, and all intersection points are different).

    Now suppose we have several bananas.

    If there is a line that intersects all bananas (intersects, but not touches), then the answer is 1 + K * (K+1) / 2 + (K + 1) * (N - 1). This formula means that we take an answer for one banana, and we cut all the remaining bananas by K lines into K+1 parts (because all intersection points are situated in the first banana). Why is it optimal to put all intersection points into one banana? Because each intersection point adds +1 to answer, so we've already achieved theoretically maximum possible value.


    So, the problem is in reality the following: given N circles, determine, how many of them can be intersected using one line. I've solved it in O (N^2 log N) in the following manner: we suppose that the line touches one of the circles (we iterate over all N of them), so the position of the line can be described as polar angle. So any other circle can be described as an interval [angle1; angle2), where angle1 and angle 2 are the angles, when our line touches this circle. (We exclude the right end of the segment, because we don't want to find an answer, were a line touches several circles, but can't be made to intersect all of them.)

    So, the algorithm now is to find the point with maximum number of intervals covering it, which can be done in O (N log N).

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

when will the editorials come out.Waiting for it desperately.....
»
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
can anyone help me in finding the editorial of this contest 94..
»
7 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Some hint for problem B Div 1 with suffix array. I am dead!

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

Some hint for Problem B Div 1 with Suffix Array? I am dead!