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

Привет, Codeforces!

Задачи сегодняшнего раунда были предложены вам пользователями roosephu и Sunayuki. Большую помощь в подготовке задач оказали Aksenov239, GlebsHP и команда Codeforces. В составлении и оформлении условий участвовали сотрудники компании ZeptoLab.

Вас ждет плавная динамическая стоимость задач (с шагом в 250 баллов).

В 2014 году мы провели свой первый контест по спортивному программированию совместно с Codeforces, и нам понравилось!

Контест состоял из 6 задач, на решение которых отводилось 2,5 часа (ознакомиться с задачами прошлого года и даже попробовать свои силы в их решении вы можете по ссылке).

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

Zepto Code Rush 2014 побил действующие рекорды Codeforces по популярности раундов, а задачи понравились участникам. К слову сказать, первые 3 места заняли разработчки из России, что не может не радовать. Кое-кто из них даже приехал забрать призы в офис, где их ждала мини-экскурсия и гвоздь программы: конечно же, игра в гигантский Cut The Rope и наше стандартное корпоративное "озеленение" на входе (озеленением мы называем вручение welcome-kit, полного забавных вещиц нашего корпоративно-зеленого цвета).

А кое-кому повезло еще сильнее: они задержались у нас чуть дольше, чем просто на экскурсию, и по-прежнему радуют нас своими рабочими успехами. Ниже пара мыслей от одного из них, Гриши WhiteCrow Назарова:

Изначально я пришел за леденцами (шутка), но сейчас, если делиться впечатлениями, — в первую очередь важно то, что я могу здесь быть собой до конца. Зептолабовцы толерантно относятся к моим странностям и ценят меня как человека. Кроме того, в Зептолаб руководители ставят задачи с учетом способностей каждого разработчика, в том числе передо мной. А когда руководитель тоже "в теме" алгоритмов, мне есть, где развернуться. Получилось, что я стал этаким client-side back-end разработчиком, чего, собственно, и хотелось. Да, я знаю некоторые структуры данных, которые в Зептолабе вряд ли скоро пригодятся (они бы больше пригодились, например, в разработке поисковика); к этой части своих знаний я практически не обращаюсь в ежедневной работе. Зато эти навыки мне полезны на внутренних алгоритмическиех контестах :) О рабочих моментах: моей последней задачей было улучшение упаковки атласов при подготовке игровых ресурсов – известная NP-трудная задача. Мне удалось добиться существенных успехов: улучшить известные и лучшие на 2013 год по разным метрикам алгоритмы. В результате потребление памяти во всех наших игровых проектах сократилось на мегабайты, и у сборок появился запас по memory-limit. С аппетитом наших художников, я думаю, это ненадолго :) Возможно, мою работу мы опубликуем на одной из ближайших конференций. В целом, навыки спортивного программирования здесь очень ценятся, а этому, по моему опыту, в других компаниях придают недостаточное значение.

Ну а цель сего поста проинформировать вас, уважаемые участники, вот о чем: 4-го апреля (в субботу) в 19:30 состоится наш второй контест Zepto Code Rush 2015.

Мы уже вовсю работаем над тем, чтобы снова удивить вас нетривиальными задачками и по результатам порадовать не менее крутыми призами, чем на прошлом контесте:

Кстати, кроме как поучаствовав в контесте, такую жилетку больше никак не отхватить. Жилетки крутые.

Ну и по-прежнему: у того, кто покажет неплохие результаты по конкурсу, будет возможность устроиться к нам по упрощенной схеме. Если вам интересно попробовать себя в команде ZeptoLab — поставьте соответствующую галочку при регистрации. О том, что такое работать у нас можно почитать тут: http://zeptoteam.ru/.


Заинтересовались работой в ZeptoLab?

Чемпионат будет проводиться в один раунд. Формат соревнования — по правилам Codeforces. Раунд будет рейтинговым и общим для обоих дивизионов.

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

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

Все мимо — дорога в Архангельск занимает у нас 28 часов... И приехать надо к 5 апрелю... Не в курсе, о чем я? :)

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

    Кстати да. ~240 сильных школьников отметается, ибо они будут в это время где-то на пути в Архангельск на всеросс!

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

    А еще в это день в Самаре проводится контест.

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

      Удачного вам прочтения условий в Самаре.

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

        Помним, знаем) Задача про баржы с прошлого года уанлав

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

      Чисто теоретически, вполне можно успеть написать раунд в гостинице после контеста и разбора.

      P.S. Барж на чемпионате Поволжья не будет)

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

        Был бы там интернет еще. ато с телефона на несколько ноутов не особо...

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

    мы так пропустили VK cup 1 round, так как ехали в поезде после республиканской олимпиады

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

This contest will be rated ?? or get any editorial ??

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

Div.1 vs Div.2

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

The vests are great! :))

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

Nice Jacket. I liked It :)

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

    Rare! This is one of a few clothes you can win from a programming contest, and you can actually wear it in some not-programmatical place.

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

your games are full of fun! And they are so popular in my country.

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

No T-shirts =(

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

    I agree, it's not that funny when there aren't T-shirts :( .Anyway, I hope the problems will be as interesting as last year or even better :)

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

    There are 15 vests and 50 plush toys to win and you are complaining that there are no T-shirts (100th opportunity to get programming T-shirts?) -_-... Codeforces community can be so cruel sometimes ; d

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

I would kill to get that cute toy and vest!

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

I love ZeptoLab. The code rush will be good!

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

i really wonder if viktork is fake account or a specialist host the zeptolab code rush!

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

tourist would you leave the IPHONE 6 this time ?

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

Still waiting for last year's Tshirt..

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

your company's games are full of fun,and they are popular in my country!

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

How can we register guys?

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

I think After this contest Color me pink (magenta) will be

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

If you want to highlight both the upvote(green) and downvote(red) arrows simultaneously you should first click on the upvote arrow and then "very quickly" after clicking on the upvote arrow , click on the downvote arrow .

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

Hopefully there would not be many unknown giant-non-rated(div1 coder competing in div2) coders here!!!

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

    Huh this is combined division contest. This only happens in div2 only contests. So no need to worry.

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

I thought that more than 6000 participant will join to the contest

But now it's only 3500...

Maybe it will be(I hope)

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

iPhone 6 is gone. tourist is participating. :)

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

come on sorry_dreamoon !

iPhone 6 is waiting for you !

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

Still waiting starting the raund :))

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

Good luck and have fun!

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

tourist vs Petr ... I'm waiting :)

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

I moved the round 5 minutes forward just to be sure that everybody are ready and registered. May the Force Om Nom be with you!

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

Welcome kit of Zepto Lab is "going green", but for codeforces, it is "going RED"!!

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

Wow, the prizes are awesome, and I'm sure the problems will be just as good. It's a shame that with >5000 participants a few people (including me) don't stand a chance at getting one of those cool vests. How about giving away a few vests or buttons to random participants besides the top 50, or better yet, a vest for someone random in the top 500, in the top 1000 (places 0-1000), and so on? That way the more skill you have the better the chances for getting a prize, but everyone still has a chance. But then again, prize or no prize, I'm sure we'll have a great time solving the problems :).

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

It's starting in 5 seconds...

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

Вангую, что много C упадут на систестах. UPD: так и вышло!

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

Nice Contest thanks all :)

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

It Ended in before 10 minute

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

Can anyone give a hint about E?

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

    It is similar to WF2014 Problem K. I used the same method I used to solve that problem, but it may TLE on system test.

    Use greedy + dfs + binary search to solve it.

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

      What is your complexity?

      The O(N * log * Q) is quite obvious with the same method from WF2014 — K, but I think it'll TLE, so I didn't attempt..

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

        I think it will TLE too. I did some pruning so I can past the pretest. Let's hope it will not TLE on system test. :D

        UPD: It passed system test! [smiling face]

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

      thanks :D

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

    To solve this problem, first, you need to compute, for each level, how many levels starting from this one would fit in one group. Then, use dynamic programming to compute for each level, starting from the last one, two numbers:

    • How many groups are necessary to store all the levels from this level to the last level, inclusive.
    • How many more levels, starting from the beginning, would fit in the remaining space in the last group.

    Now, the answer is the smallest number of groups among levels where the groups include all levels, i.e. minimum of the first number among those i for which the second number is at least i.

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

      Thanks guys

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

      I tried that but I get TLE :(, I did many optimization but still no success :(

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

      Another solution with the same complexity:

      If the answer for a query is equal to R, then if you start with the first element and do greedy, your answer will be at most R+1. So lets try to start with the first element and get some answer R', and after that check if R'-1 is also possible.

      To check that, you can build an oriented tree with edges (P[i], i), where P[i] is largest position such that group [i, P[i]-1] fits. Now you have to find a path in this tree of some fixed length such that the difference between indices of the first and the last vertices of the path is at least N. Since the number of paths in O(N), you can easily check that using dfs.

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

    Mine O(N·Q) approach calculates for every starting position how many groups are needed and what is the sum of leftover elements at the end, which can be eventually grouped with the elements in the beginning.

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

Как решать С?

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

    там ты берешь красных либо много, либо мало.(До 1000000 перебор сколько возьмешь красных и до 1000000 перебор сколько возьмешь синих(переборы не один внутри другого) ). Надеюсь не упадет)
    **UPD:** упала... я 10^5 поставил и багу допустил... печаль

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

    Я воспользовался тем фактом, что если надо набрать ровно НОК(Wr, Wb), то мы будем набирать только одним типом, а также тем, что если надо набрать хотя бы 2*НОК то там будет НОК набранный одним типом. Поэтому можно посчитать НОК, набрать этим НОК сколько входит в С минус один, чтобы у нас осталось от одного до двух НОК, и уже в этом остатке перебирать по кол-ву большего веса. Сложность О(min(C/Wmax, Wmin)). 10581578

    Upd: НОК набирать, конечно, тем типом что выгоднее

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

Почему тернарка не правильна в С? И как сделать, чтоб не валились хеши на 10 тесте в D?

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

    D — Z-функция

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

      А я решал префикс-функцией. Точнее, двумя функциями: одна настоящая префикс-функция, и одна префикс-функция, которая учитывает только префиксы не длиннее . Для пересчёта второй функции нужно начинать с прошлого значения второй функции, но дальше при переходах использовать первую функцию.

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

    У меня хеши прошли претесты. Upd: зашло

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

    Потому что функция дискретная: в точках M1 и M2 могут получиться одинаковые значения функции, на графике это выглядит как большое плато. Расстояние между M1 и M2 может получиться довольно большим, и между ними может где-то ещё лежать на самом деле максимум, а дойдём мы в него или нет зависит только от теста и ваших условий перехода. Поэтому для надёжности после получения ответа надо его ещё проверять на +-эпсилон влево и вправо, я проверял на 100000, надеюсь, этого хватит.

    Только это решение неправильное, для +-40кк падает на 14 тесте, дальше уже TL.

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

      Я ломал с переходами на миллион таким тестом: "100000001 3 100000000 3 100000001" Фиксится это переборами по обеим количествам.

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

    Видимо, потому, что не выполняется требование, что слева/справа от максимума функция строго возрастающая/убывающая.

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

inb4 90% of submissions on C fail and the problem gets 2500 points, sending people who solved it waaay up the scoreboard :D

(just so it's clear: I know that mine should fail — I have at least a typo)

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

Сириусли, в первой

print "no"

проходило претесты?

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

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

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

      Странно, кажется, я взломал одного зелёного молодого человека, который не должен никогда выводить "yes". Видимо, я ошибся

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

Good Bye Div. 1 till 2 months later :-h

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

Is D a DP? How can I solve it?

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

    I've solved using Z-Function.

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

      It's funny, because the great post about it by paladin8http://codeforces.me/blog/entry/3107 is currently on top 5 of recent actions :)

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

        It's extremely simple with KMP too: 10582275

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

          Can you explain your solution, please?

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

            Let's ignore K for a moment and focus on choosing A, B. We have that the whole string S must be periodic with period len(A + B). Therefore len(A + B) is a multiple of the smallest possible period P for the whole string.

            Suppose len(S) = mP + q, with 0 <= q < P. The last q characters have to be in A (as len(A+B) is a multiple of P). Therefore, the necessary condition to write S as A + B + A + B + ... + A is that len(A) = xP + q, len(B) = yP — q, and x+y divides m.

            Knowing all of this, which A, B to choose to get k repetitions? Suppose you choose A to have length L. After you remove the last A, you have to leave something which is (A+B) repeated K times. Therefore, you have that:

            • The prefix of length len(S) — L must be periodic with period T = (len(S) — L) / k.
            • The period T has to bigger than or equal to L (as it is equal to len(A + B)).

            From the first condition, we want L = len(S) mod k, and from the second condition, we want L as small as possible. So try L = len(S) mod K and check if it's valid, otherwise print 0.

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

          KMP indeed! How did you use the pos array?

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

          Can you explain the idea behind your code, please?

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

      what was the main idea?

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

        Check all possible lengths L of block A + B. For each L use Z-function to find number t of equal blocks A + B (by checking z[L], z[2L], z[4L], z[8L]...). if t ≥ k, then fill min(z[L * k], L) indices with 1 (at position L * k). Complexity O(nlog(n))

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

          Actually you can do it in O(N). In fact you only need to check if z[L]>=L*(K-1)

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

    Thanks!

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

Some hints for problem C ,please!!

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

    This is my solution

    Divide case into 2

    • Suppose that Hr/Wr > Hb/Wb
    1. Wr > 1000000 : check all posible case

    2. Wr <= 1000000 : In this case, number of blue candy is smaller than Wr so check all

    I'm not sure this is right

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

Can i filter standings table by color?

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

Is the problem F only this? http://stackoverflow.com/questions/1824388/finding-sorted-sub-sequences-in-a-permutation I just didn't want to copy-paste the code, which is probably not even allowed...

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

ignore

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

Is D some kind of KMP? I was trying to figure out something from the mismatch array but failed.

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

    D can be done using Z

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

    I've used Z-algorithm...

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

    A friend of mine used Z-algorithm. I'm not too familiar with that, so I used rolling hashes for string matching. As long as you have constant-time string matching, it can be solved in O(n lg n): for each value of m = 1...n/k, check if the first km characters is just k copies of the first m characters. If so, also check to see the longest prefix 1...i which matches km+1...km+i (using binary search). Then all strings from km...km+i will be regular (and with some minor details this gives you the output).

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

How to solve C ? Integer Programming seems too complex.

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

    I will describe my algorithm but I don't know if it is correct since I haven't got the chance to submit its final version because CF was not available in the last seconds :@ :@ :@

    We know that X * Wr + Y * Wb <= C.

    If we have fixed Y, then X <= (C — Y*Wb) / Wr. As we want to have maximum X, let's say that X = (C — Y * Wb) / Wr.

    Happines = X * Hr + Y * Hb. After replacing X, we get:

    ((C — Y * Wb) / Wr) * Hr + Y * Hb.

    Now, using binary search we can find when F(Y) starts to be less than F(Y-1), where F(Y) = ((C — Y * Wb) / Wr) * Hr + Y * Hb.

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

Кому-то удалось сдать С за О(C), D за O() или Е за О(Q * N * log(N))? Потому что у меня это все работало за  ≤ 1.5 * TL, и серьезно напрягало.

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

    С за O(10^6) (:

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

    E за O(QNlog(N)) у меня около 4 секунд в запуске работало =( Ты двоичный подъем писал или что-то другое?

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

      Именно его. Да, у меня тоже около того работало. Учитывая, что ТЛ был 3 — меня это очень смущало и я напрасно потратил кучу времени, пытаясь его оптимайзнуть:(

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

        Я добавил пару хаков и зашло решение за O(QNlog(N)) в E.

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

        Вместо двоичного подъема я написал два указателя на дереве — зашло за 1107 мс. Уж не знаю, почему =)

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

      E решается динамикой за O(nq). Вначале для каждой позиции считаем, сколько нужно взять, начиная с неё, чтобы заполнить одну группу. Потом, для каждой позиции, считаем, сколько групп нужно взять, чтобы дойти до конца, а также сколько ещё элементов с начала можно добавить в последнюю группу. И то, и то считается за O(n). Затем, ответ находится достаточно тривиально.

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

    Я C сдал за O(C/max(Wb, Wr))

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

    Сдал C за O(C / Wr + C / Wb) с отсечением случая, когда Wr или Wb равны 1. Зашло за 810 мс на MSVC++.

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

what's the best time complexity of problem c? I have solved similar problem on http://codeforces.me/contest/519/problem/C but here it's 10^9, and I always tle..... Could anybody give me some hint?

How about problem D?

Thanks : )

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

It was duficult.

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

I couldn't hack from Firefox (Chrome worked fine).

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

    Hi, could you prove that your solution on C works correct for all cases?

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

      If Wr is big, the number of red candies must be small. If Wb is big, the number of blue candies must be small. If both Wr and Wb are small, there are two cases: use less than Wb red candies or use less than Wr blue candies.

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

    To hack from firefox you would have to delete the browser's cookies

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

Problem C have been used in a regional contest in China.

http://acm.hdu.edu.cn/showproblem.php?pid=4091

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

Шикарно — в задаче B, судя по 10577708, не было ни одного макстеста в претестах

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

    И что?

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

      То, что вполне можно было дать претест на размеры массивов

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

        Вполне можно было прогнать тест на размеры массивов перед отправкой =)

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

        Вообще, оно могло и не упасть, если повезет. Массив размера 2010, 2047 не слиьно вылазит.

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

Мой фэйл по задаче A:

for (int i = 0; i < n; ++i) {
  for (int j = i + 1, d = j - i; j < n; ++j) { ...

:(

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

So whats the dreaded test case 3 in problem C

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

How to solve Problem B? I found out the path having maximum number of lights, but had problem in incrementing values of edges and distributing the increment among edges in a path. Maybe I complicated it too much.

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

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

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

А как планируют передавать участникам призы? У меня просто в профиле указан адрес прописки в Карелии, а сам я в Москве живу.

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

Ok , since I didn't win anything I just have one question :
When will the ratings be updated ?

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

Откройте дорешку, пожалуйста %)

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

Кто-то понимает как валить следующее решение по D: (или доказывать, что оно быстро работает) 10587220

Перебираем j = pi(pi(...(i)..)), где pi — префикс-функция.

Далее, пытаемся использовать |a + b| = i — j. И если находим ответ — делаем break.

Зашло за четверть секунды.

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

    Миллион символов a, и поменьше k? А вообще, такое решение можно слегка изменить, чтобы оно работало за O(n).

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

      Да, спасибо n=1e6, k~=1e3 работает около 3с (я почему-то думал, что ограничения 1e5, когда сдавал), сам тестил на 'a' * 1e5, но оно не сломалось)

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

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

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

    Ну вообще говоря, оно протухнет через некоторое время(потребует обновить)

    Но ограничение неприятное, да.

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

      Так или иначе, я могу хоть скрин сделать (кажется, это нигде не запрещено?)

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

Finally Division 1! :D

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

Became orange after 1.5 years not doing programming competitions xD

Btw, I solved C using some hacky brute-force constantly checking time limit until 0.9 second passes. How bad am I for doing is that?

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

    Very smart.

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

    Actually, it's easier to gain a lot of rating in a combined division round than a div1 only round for some reason.

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

      My wild guess: In div1 only round some fraction of participants prefer to skip the round, should they observe problem A is too hard. So you can't "steal" your rating points from them. Combined round has easy entrance problems, so much more skippers got trapped :) More people lose rating — more chances you get some

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

Впервые я стал желтым на Zepto Code Rush 2014, а красным на ZeptoLab Code Rush 2015. Спасибо! :)

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

    Это еще не все, у красного есть еще один оттенок :)

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

      Я надеюсь, что ZeptoLab будут проводить еще соревнования :)

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

I solved problem a like so many other people did,a very bad solution that works because n<=100 here's my solution anyone knows why it's wrong? 10579934

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

Could anybody tell me why this solution of E is correct? It looks like magic. 10581607

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

Please, take a look at this submission.

We can see that an array check with 100 elements(indexed from 0 to 99) is declared.

int check[100]={0};

I tried to hack it with the following test:

100 *****...******

Here "..." means a lot of '*'s, not dots.

Let's take a look at the following for loop:

for(int i=0;i<s.size();i++)
{
    if(s[i]=='*')
        check[i+1]=1;
}

Here, the variable i can be up to s.size()-1 which is 100 — 1 = 99. Then check[i+1] will be check[100] but it is indexed from 0 to 99. Then shouldn't this be a runtime-error because it cost me -50 instead of +100 :@

PS: Something similar happened during Codeforces #297. I tried to hack this code. As we can see, the guy is pushing some things in a vector ot. And what if ot is of odd size:

for(int i = 0; i < ot.size(); i+=2){
  out += ot[i]*ot[i+1];
}

I think that if ot.size() is odd, then i+1 will be equal to ot.size() at some point which should be a runtime-error anyway but it wasn't...

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

    It doesn't give runtime-error. It causes undefined behaviour and sometimes works correctly.

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

      Ok, thanks! I thought that it should be RTE because usually on my computer it causes Segmentation fault and when I submit such code on lightoj it causes RTE :)

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

Can someone please explain the solution for problem E? I didn't understand it from the Editorial.

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

i wish i could won the jacket :(( its so nice :)

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

I really like the way in which testcases for E were generated.

All large tests are we'll give you 50 queires, but most of them will be same. Are you serious, guys? :) Looks like most of O(N * log(N) * Q) solutions can pass after adding memoization. My messy implementation (10587744) wasn't even able to pass pretest 10 during contest, and after adding memoization it runs in 1.6 seconds (10600918).

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

    Omagad, what a shame. It is reasonable to create a maxtest with worst case repeated, but in ALL of them -_-...

    What is more, there are some wrong submissions which passed (as pointed out above).

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

    What's more, just 21 tests.

    When I create tests, I usually also do something like "10 completely random tests" and variations of it several times. More tests won't kill anyone, especially on problems that won't have too many submissions. But this...

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

Is there any tutorial for this contest?

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

It looks like ZeptoLab has bad luck with repeating problems. As pointed above, C, E and F were already present in some places of the Internet and one year ago E was from Junior Polish Olympiad in Informatics (I watched editorial created by johnasselta during the contest :P) and F was used in Petr Mitrichev contest.

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

Will this contest an editorial?I haven't see it.