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

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

Всем привет!

Скоро начнется Codeforces Round #170, и его автором буду я. Надеюсь, многие будут рады решить все задачи.

UPD: Разбалловка задач динамическая, задачи расположены в порядке возрастания предполагаемой сложности.

И стандартная часть: спасибо Gerald за помощь в подготовке задач, Seyaua и sdya за тестирование, Delinur за переводы, MikeMirzayanov за создание платформы Codeforces.

Удачи!

UPD: Разбор

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

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

i wish you good luck and have fun ;) =d>

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

It's also 11.30 here. I'm doing my internship, hope I will not get fired for sleeping at work -.-

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

I hope it will be a good contest! I just have a question, why do Seyaua and sdya have different name, but their image are same??? (i know their family name are same! maybe they are brother!)

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

yes we are twins...

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

How can I get positive votes in blogs? Please, help me!!!

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

    Always if you say 'LIKE ME' people will Dislike, because everyone want to harm))

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

Сидим с друзьями на лекции по машинному обучению в ЗКШ при МФТИ, и как плохие парни будем писать раунд. Страшно.

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

Score distribution is still unavailable :(

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

4 problems with Score 3k :v Nice contest!

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

 Что за приколы?

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

Чудесно. Одна халявная задача и четыре гроба. Какой отличный подарок "фиолетовым". Хочу обратно в Div2... =(

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

    "Чем больше задач я решил, тем лучше проблемсет". Гениальная логика, что уж тут сказать.

    Upd. Хотя я в целом согласен, что проблемсет далеко не идеальный, но у Вашего недовольства ведь немного другие причины)

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

      >проблемсет далеко не идеальный

      "Петров, разве ты не видишь, что твоему товарищу за шиворот падают капли расплавленного олова?"

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

      Всё же, согласитесь, ненормально, что из 634 участников div1 только 161 сдал больше одной задачи (которую, в свою очередь, большинство сдало в течение первых 30 минут)? Я уж не говорю о div2, где за D и E мало кто и брался.

      Такая вот причина недовольства.

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

        Нормальный был контест, хватит ныть.

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

          Нормальный в качестве последнего онлайн-раунда какого-нибудь крупного соревнования вроде VK Cup :).

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

    Я с вами не согласен задачи в Div1 задачи B и С вполне решаемые: загляните в коды решивших эти задачи. Не решил их из — за того, что в А (div 1) C(div 2) набажил, долго исправлял ошибку, и долго передебаговал даже после АС.

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

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

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

    И чего там за претест 4...

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

      будет не хорошо если я скажу тест, но все же посоветую перечитать условие! очень поможет =))

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

    Как обычно, сам дурак...

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

Кстати это ведь небольшая подсказка для задачи B div.1, что люди сдают ее в основном с использованием ~0 памяти.

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

what is wrong with testcase 4 of 2C ???

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

Пора завязывать долбить задачу до конца =( Как решать С?

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

    Казалось бы игра — обычный ним. Разрезы в разных строках и столбцах независимы. Состояние — количество не разрезанных отрезков длины 1.

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

      Это понятно. Как быстро определить выигрышный ход?

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

        Перебираем, в какой игре он будет сделан. Зная функцию Гранди от всех игр и от данной, xor'ом можно понять, какой она должна быть, чтобы сумма игр обнулилась. Если строго меньше текущего значения — можно уменьшить, вырезав сколько надо отрезков.

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

        Казалось бы перебрать в каком ниме сходить. Интересные нимы либо там где уже были ходы, либо 1 неюзанная/строка столбец. Итого не более k + 2. Суммарно по отрезкам пройтись тоже o(k)

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

        Выигрышный ход должен делать xor равным 0. Пусть в начальном состоянии получили XOR-сумму S. Можно перебрать все неравные неразрезанные отрезки (их O(K)), найти такой, где ДлинаОтрезка XOR S< ДлинаОтрезка, и отрезать от найденного разреза нужный кусок, чтобы стало 0.

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

        найти полосу в которой его можно сделать это называется где g — общая гранди = количество неразрезанных, а t — гранди этой строки/столбца.
        После этого в ней отрезать от 0, до k-ой не разрезанной.

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

      Блин, а я откуда-то взял, что два разреза нельзя пересекать =(

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

      вчера никак не мог вспомнить как ним назывался. хотя это не совсем обычный ним. в обычном количество кучек не увеличивается.

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

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

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

last 15mins I have problems with connection to codeforces.

is this only with me or with all?

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

Very FAST system testing @ Div 2!

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

Что-то я не понял, как мое решение по Б 3215978 прошло систесты o_O

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

Много ли людей, уловивших правильную идею по В, но неправильно разобравших случай с M == 3?

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

    Хм, в моем решении помимо -1 (5 3, 6 3) так же особенным был случай 8 4 (а ответ был найден перебором)

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

      А что за конструкция? У меня две центрально симметричных параболы, все покрывают вроде.

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

        Внешний правильный многоугольник радиусом 1е8 из m вершин и внутренний радиусом 1е4 из n — m (при этом внутренний повернут на случайный угол)

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

          У меня так не получилось :( 3213530 Но это из за того что не проверял test 5 3.

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

          Так же сдал. Понятно, почему правильно. Только может так получится, что три точки окажутся на одной прямой, вы это как-то отдельно контролировали? Или вероятность такого слишком мала, чтобы обращать на это внимание?

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

      Вот здесь есть ответ на тест 8 4 (на картинке справа), а также написано про ответ -1 для 5 3.

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

        Facepalm. Сегодня утром читал эту статью и сказал сокоманднику: "Забавная задача". ))) Double facepalm. Во время всего CF раунда у меня в голове крутились забавные фамилии Эрдёш — Секереш, которые я утром прочитал в вики.

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

Если бы 4 тест в C div2 не включили в претесты, то на взломах по этой задаче можно было бы получить больше, чем по самой задаче)

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

Пол контеста убил на Бdiv2, так ничего и не вышло. С на мой взгляд была проще. Как решается Б?

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

I've challenged this solution twice during contest time but it returned correct answer

Submission: 3209935

But it failed on similar test case! admins please clarify?

Here is one of my test case: 100 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100 1 100

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

now I read problem B can someone explayn why length of answer<=2???

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

not good contest! :|

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

Спасибо за контест! Отличные задачи — показывают умение думать, а не кодить стандартные вещи.

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

    Серьезно? Я ЧАС кодил С, которую придумал за 3-4 минуты.

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

    Ну, задачи C и E под это совершенно не попадают, как мне кажется. Функция Гранди, где еще зачем-то просят восстановить ответ (хотя, да, это делает задачу сложнее) и стандартный минкост.

    А вот ABD понравились.

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

      Ну ок, значит я глупый, раз для меня эти задачи были неочевидны.

      Про минкост в E даже не подумал, хотя буквально в эту субботу была похожая задача — Hard на TCO R1.

      Раз уж зашла речь про минкост, хотел бы задать такой вопрос. Для max flow понятно, что есть Эдмондс-Карп (O(NM2)) и Диниц (O(N2M)) — на e-maxx эти алгоритмы хорошо описаны и обоснованы. С минкостом дело обстоит, на мой взгляд, хуже. На e-maxx написан алгоритм такими словами "похож на Эдмондса-Карпа" — и больше ничего, дальше только технические детали. Ну и асимптотика O(N3M). Но, казалось бы, если Дейкстра, то асимптотика может быть и O(Nlog(N)M2) (на разреженных графах это лучше), а может быть O(N2M2 (Форд-Беллман), но это ладно. Что меня интересует, так это доказательство алгоритма (почему мы можем просто взять и заменить bfs на поиск кратчайшего пути и сразу все заработает?) и существуют ли алгоритмы с лучшей асимптотикой? Можем ли мы переделать Диница под min cost или проталкивание предпотока (хотя этот алгоритм я не знаю)?

      Если кратко переформулировать, пишет ли кто-нибудь на олимпиадах что-то лучше "напишем Эдмондса-Карпа + Дейкстра с потенциалами" и назовем это min cost или нет?

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

        Я бы оценил асимптотику как (последнее слагаемое убивается, если изначально нет отрицательных стоимостей), где F — величина потока. В этой задаче это давало %O(400^3)%.

        Доказывается примерно так: построим какой-то поток. Если в остаточной сети нет циклов отрицательной стоимости, то он минимален (от противного: посмотрим на отличия и найдём цикл, вроде так). После чего индукцией по количеству итераций доказывается, что если каждый раз пускать поток по пути минимального веса, то циклов не возникнет.

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

          Другого алгоритма, применимого в олимпиадах, нету?

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

            Есть алгоритмы основаные на отмене циклов отрицательного веса. Например цикла с минимальным средним весом. Я его точно на олипиадах несколько раз писал. Так же есть cost-scaling, capacity-scaling их я уже не писал.. А есть книжка Ahuja про потоки там всё написанно.

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

        Довольно быстро гуглится вот эта платная статья про минкост через проталкивание предпотока. Если нужна — напишите в личку (не хочу палить контору насчет того, как я ее слил).

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

    Особенно С )) Нет, на самом деле согласен

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

Спасибо RAD за интересные задачи!

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

Как решать B и E?

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

А как, интересно, писался чекер к задаче B?

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

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

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

      А как за куб, в двух словах? Я помню, что что-то похожее было на заочке.

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

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

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

        Переберем левую нижнюю точку многоугольника. После этого сделаем динамику f(i, j) — максимальный размер выпуклого многоугольника, у которого последние 2 вершины в обходе против часовой стрелки — это i и j. Тогда чтобы сделать переход, нам надо перебрать такую точку k, чтобы поворот между i, j и k был против часовой стрелки, а также поворот между j, k и левой нижней точкой был тоже против часовой стрелки. Это работает за четвертую степень.

        Теперь отсортируем все точки по полярному углу вокруг каждой точки (т.е. заведем по массиву для каждой точки). Будем делать динамику назад, т.е. из состояний (k, j) сделаем переход в (j, i) для всех подходящих k. Для этого заметим, что нужные нам k будут лежать подряд в циклическом списке точек, отсортированных по полярному углу вокруг j. Мало того, если для фиксированного j перебирать i в порядке сортировки по углу, то можно двигать 2 указателя на подходящие индексы для k. Ну а дальше просто искать максимум на отрезке за О(1).

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

The contest was very hard but the system testing was too fast!

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

Lost 2nd position because of 10 (instead of 1000000). :( It is REALLY disappointing. I was too nervous I think. T_T

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

That was really fast system testing!

Short editorial for problems I know how to solve (sorry for possible errors):

DIV1-A. Connect persons with common language, then output is max(0, #connected components — 1) + #persons without any language knowledge

DIV1-B. [extracted from rng_58 source code] For case m = 3, n >= 5 there's no solution. m = 3, n = 3/4 one can construct big triangle and a point near one of the points of the triangle. For other cases (m > 3) one can construct (as rng_58 did I think) "function X^2" for one convex polygon (points (i, i * i + LARGE_DELTA)), and "function -X^2" for the rest of the points (poiints (i, -i * i — LARGE_DELTA).

DIV1-C. It can be considered as nim game. For every row/column with coordinates [1 .. maxCoordinate — 1] count the number of "free" unit segments ("free" = not covered by any move played). Let that number be countRow_r for row r, or countCol_c for column c. Then nim sum would be NIM_SUM = (XOR_SUM countRow_r) XOR (XOR_SUM countCol_c). So by the theory of nim game first player wins if NIM_SUM != 0, otherwise second wins. Then we have to find a move which makes NIM_SUM equal to zero, and by the theory of nim games that move exists.

DIV1-E. Construct graph with two nodes u_in, u_out per one node u originally given in the input. Attach the "source" to u_in with capacity 2 and cost 0, attach u_out to the "target" with capacity 1 and cost 0. Then attach u_in to v_out with capacity 1 and cost DISTANCE(u, v) when v can be a child of u (ie. v.y < u.y). Then run min-cost-max-flow and if the flow is n — 1 you can construct the graph and output it minimum cost, otherwise no solution exists.

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

    "number of free segments >= NIM_SUM. It can be proved that such row/column exists."

    Not necessarily. You only have to find one such that ("Y" xor NIM_SUM) <= "Y". The other condition would work for some cases but it's not guaranteed to always hold, unlike this one.

    http://en.wikipedia.org/wiki/Nim

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

    supplement .. .

    DIV1-D is a knapsack problem, actually is a dependency 0-1 knapsack problem, But the dependence is very weak. So we prefer to use a grouping 0-1 knapsack problem model to solve this. The expect score is trivial, so let us focus on the penalty. You can found the penalty system in the problem is a little bit different against the reality, that is once we start solving on those large point, we'll never back to solve a small point. This declare is obviosly true.

    Then, for two large point u, v, let us denoted by (t, f) for time and fail probability.

    • tu fv (1-fu) + (tu+tv) (1-fv)
    • tv fu (1-fv) + (tu+tv) (1-fu)

    Simplificate on the formula, Then we could found a large point u is in front of v, iff

    • tu fu (1-fv) < tv fv (1-fu) .

    Once the principal contradiction is grasped, all problems will be readily solved.

    1. Sort the problem by the above function.
    2. Running a 0-1 knapsack problem.
    3. Choose the answer.
    const int N = 1009, M = 2009, P = 1000000;
    
    pair<LL, DB> dp[M];
    int n, t;
    
    struct rec{
        LL t1, t2, s1, s2, pf;
        LL ps()const{return P - pf;}
        bool operator < (const rec& r) const{
            return t2*pf*r.ps() < r.t2*r.pf*ps();
        }
        void input(){
            RD(s1, s2, t1, t2), pf = RF() * P + 0.5, s1 *= P;
        }
        void update(){
            DWN(i, t, 0){
                if (i + t1 <= t) checkMax(dp[i+t1], MP(dp[i].fi+s1, dp[i].se));
                if (i + t1 + t2 <= t) checkMax(dp[i+t1+t2], MP(dp[i].fi+s1+s2*ps(), (dp[i].se+t2)*pf/P));
            }
        }
    } A[N];
    
    int main(){
    
    #ifndef ONLINE_JUDGE
        freopen("in.txt", "r", stdin);
        //freopen("out.txt", "w", stdout);
    #endif
    
        RD(n, t); REP(i, n) A[i].input();
        sort(A, A+n); REP(i, n) A[i].update();
    
        LL a = 0; DB b = 0; REP_1(i, t){
            if (dp[i].fi > a || dp[i].fi == a && i-dp[i].se < b){
                a = dp[i].fi, b = i-dp[i].se;
            }
        }
        printf("%.9lf %.9lf\n", (DB) a/P, b);
    }
    

    As we want to minimize the penalty, it'll be a wise idea that we use the second dimension of the dp array, record the maximum expected save of the penalty.

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

My solution is correct!!!!!! :@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ this failed on system test: http://codeforces.me/contest/278/submission/3214079 and then just added this lines for debug and when i submitted Accepted :/ http://codeforces.me/contest/278/submission/3219530

difference is only :

void add(string &s,int toindex,int strindex) {
    if(s.length() <= strindex)
        return;
    if(root[toindex].c[s[strindex]] == 0) {
         root[toindex].c[s[strindex]] = ++cindex;
         add(s,cindex,++strindex);
    }else {
        add(s,root[toindex].c[s[strindex]],++strindex);
    }
}

void add(string &s,int toindex,int strindex) {
    if(s.length() <= strindex)
        return;
    int ind = root[toindex].c[s[strindex]];
    if(ind == 0) {
         root[toindex].c[s[strindex]] = ++cindex;
         add(s,cindex,++strindex);
    }else {
        add(s,ind,++strindex);
    }
}

why it has different answer?

Seyaua

Gerald

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

    You have undefiined behavior in line add(s,root[toindex].c[s[strindex]],++strindex); arguments can be calculated in any order. For example it can be

    1. calc strindex for last argument
    2. add 1 to strindex
    3. calc root[toindex].c[s[strindex]] with new strindex.

    Probably this one happened. It can depend on compiler and OS.

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

      Also the same compiler on the same OS can reorder the parameters if it finds that to its advantage.

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

      typedef struct node{ int c[255]; node() { for(int i = 0; i < 255; i++) c[i] = 0; } } node;

      nooo i initialize all the nodes, none of them mustn't be undefined..... strindex is always less then s.size(); every s[i] is less then 255, c[255];

      and it means that if(root[toindex].c[s[strindex]] == 0) is false

      and

      int ind = root[toindex].c[s[strindex]];

      if(ind == 0) that's true :/

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

        add(s,root[toindex].c[s[strindex]],++strindex); may be done as ++strindex,add(s,root[toindex].c[s[strindex]],strindex); and may be done as add(s,root[toindex].c[s[strindex]],strindex),++strindex,;

        One of them is correct, and one not.

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

Хороший контест, спасибо автору. Жаль только, не решил С. То есть как, придумал решение за пару минут, потом закодил минут за сорок вывод FIRST/SECOND. А вот восстановление первого хода так и не успел :\

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

The problem Standard was A , B , C , E , E :D

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

In div-1 1st prob:pretest 4 could have been avoided to increase successful hacking attempts.

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

Контест будет рейтинговым ?

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

When will the rating update ? If there any problem, please update this blog.

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

А сколько могло бы быть взломов не будь 4 теста в задаче C(Div2) :)

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

In problem Games, I get WA on test 17. In the test one of the cuts is "2 4 2 3", while the jury's answer is 2 0 2 5. How could it be right?

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

    What's the problem?

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

      If the part 2 3 2 4 was already cut, how can we cut 2 0 2 5? Won't we repeat the edge 2 3 2 4?

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

        As long as you touch some uncut parts, it's fine. (I asked this question during contest time)

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

    Please note that the paper doesn't move during the cuts and you can cut along previus cuts but you have to cut at least one more unit line.

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

    I did the same mistake :( I believe this problem should have better definition of cutting even with a figure showing different situations.

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

Could someone comment on possible strategies for div1-b checker ?

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

    Fit m vertices evenly on a circle with radius R1. Fit the other n — m ones evenly on a circle with radius R2 < R1. This can always be done, except when m = 3 and n > 4, I don't know the reason for this yet though.

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

    You can also create a distribution like this:

    http://s16.postimage.org/83zarzh2d/design.png

    This will guarantee that you cannot form a polygon whith more than 4 vertices selected from both the first and the second set of points. So, if you have M>3 or if M=3 and N<=4 then the given strategy will provide a good solution.

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

      Thanks for the solution, but I was asking about how the checker would have evaluated the answers. I would like to know what logic did checker apply on the output points so as to verify that maximum convexity is m. (a naive approach of selecting m+1 points and checking will be too time consuming and I am not able to think of a better checker)

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

        My guess about the checker is to run Convex Hull algorithm(O(nlgn)) on your points and see if the output is m or not.

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

        I am sorry I misunderstood your question. My guess for how the checker works for this problem is that it sorts the output points clockwise or anti-clockwise, and then it used a dynamic programming algorithm to find the maximum convexity of the points. If the maximum convexity is equal to M, and there are no 3 points situated on a straight line (which could be verified in N^3 complexity, given that N is no bigger than 200) then the solution is considered correct.

        As for the Convex Hull algorithm, I do not believe this algorithm would have found the maximum convexity of a set of points (consider a hexagon inside a square, the convex hull algorithm would say that the maximum convexity is 4, which is not correct) .

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

      You also need to make sure you don't have 3 points at the same line, like here: http://s24.postimage.org/oynvny78l/design2.png I wrote same solution but made this bug during the contest. I took a random distance out of my head between those two simmetric figures, but, as usual, if it is possible to make a bug I will make it:)

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

        My guess about the checker is to run Convex Hull algorithm(O(nlgn)) on your points and see if the output is m or not.

        [Edit: sorry I meant to reply to pareshverma91]

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

    First of all, check that no three points lie on the same straight line.
    Then iterate over all points, and assume that the i-th point is the leftmost point of largest convex polygon. Sort all the points to the right of i by the angle relative to the i-th point.
    Calculate the following DP: z[t][j] = the maximal size of polygon, where the first point is i, the last point is j, and the next to last is t (j is always greater than t by the relative angle). We can connect points i and j to finish the polygon of z[t][j] points. Or we can find the next point k to continue building the polygon. k must be greater than j by relative angle, and triple (t, j, k) must have positive orientation. This solution is O(n4) in total, but actually it's C(n, 4). And you can improve the DP to make it O(n3). Code: http://pastebin.com/Ubf25Qq8

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

Fast System test is awesome, hopping rating update be as fast as it .... every contest.

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

In problem div1-C, the sentence "that is the knife has to touch the part of the paper that is not cut before." is ambiguous. One could understand, as in my case, that the knife can only touch the part of the paper that is not cut before. My submitted solution in contest time was written according to this interpretation. Please, try to be clearer the next time.

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

    I find it clear. In your interpretation, it'd be "cannot touch the part that was cut before" — exactly to remove the possibility of this ambiguity. But if you're not sure, you can still ask an official question — they're answered pretty fast.

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

      I also asked the same question during the contest. Maybe it should have been better to make a public clarification since lots of people asked about it.

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

    The same here ; /. In fact it's our fault, but that's not a good thing when many contestans got the description wrong :d.

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

    I made the same mistake too :(

    I think for this kind of ambiguous, one of the best solution is to have it in samples to resolve it.

    Samples are not used for testing, but are used for better understand the statement and resolve the ambiguous.

    The current samples are already very good that resolved the ambiguous of "it is not guaranteed that the cuts were obtained during any correct game".

    Hope it can be better next time.

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

Why my solution in problem C div2 getting "Ошибка исполнения на тесте 10"?I think everything is OK...but i can't understand why it is giving TLE...PLS help...Here is my code:3214342

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

    You don't get TLE (Time Limit Exceeded), but Runtime Error. Download the test, run in your environment, debug.

    Edit: Aha, you can't download the test. But repeat the last full line 30 times and you should get runtime error locally. I did with your prog.

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

      thx for help...but my prog giving true result in my computer...but in codeforces it's giving runtime error...but i don't know why?...

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

        This is the problematic line:

        int n,i,j,k,l,f,d,c,ans,cnt,s,t[MN],m;

        Don't declare all the letters in advance. You used global variable L, where you should have a local L. Probably your compiler optimized the code incorrectly, not expecting that the value of L could change inside the loop. Actually it is changed inside recurent calls to dfs. Incorrect optimization surprisingly gave expected behavior in your environment. I bet you don't use gcc, do you? What's your compiler?

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

          thx a lot for helping...i accepted it...problem was "l" i think...i took it from global and it got accepted...

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

Спасибо за контест! Отдельное спасибо за sample "7 4" в Div1B, который подсказал правильную идею. Без этого примера был бы твердо убежден, что для "7 4" и "8 4" ответа не существует. P.S.: не думал, что можно так радоваться, сдав задачу за 3 минуты до конца :)

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

    Вы не представляете, как радовались команды Moscow SU 1 и Belarussian SU 1 в последнюю минуту NEERC. Первые сдали D, а вторые — I.

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

      Все-таки они радовались не в последнюю минуту, а уже на награждении.

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

Will the editorial be public?

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

in problem div 1 C "You are given an n × m piece of paper" "(0 ≤ xbi, xei ≤ n, 0 ≤ ybi, yei ≤ m)" how can be both correct? if 0<=xbi<=n and 0<=ybi<=m than we are given n+1 x m+1 piece of paper no?

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

А как бы решалась задача C, если бы условие было такое: То же поле NxM из белых квадратов 1х1, только теперь мы берем отрезок из единичных квадратов и полностью красим их в черный цвет. Отрезок берем такой, чтобы в результате перекраски хотя бы один новый квадрат поменял цвет. А игра заканчивается, когда все квадраты станут черными. Нужно так же вывести первый ход первого игрока, если он выигрывает.

Я не придумал, и мне кажется, что с такими ограничениями она решения не имеет. А у вас есть какие-нибудь мысли по этому поводу? Или это чушь и просто забить?)

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

Also made a screencast: link

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

а не писать разбор это теперь стало мэйнстримом?(

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

    Вообще-то еще вчера был: ссылка

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

      спасибо, значит не заметил в комментах( однако хотелось бы его все-таки видеть в UPD в анонсе)

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

    Когда это не писали разбор?

    UPD. Имею ввиду сколько разборов не написали, что это стало мейнстримом?

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

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

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

        http://codeforces.me/blog/entry/6779 вот на прошлый контест.

        Разбор на позапрошлый раунд как вы сами сказали — "на англ версии есть".

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

          да, неправильно выразился наверно. не "писать разбор", а "выкладывать его на главной", как сейчас и раньше

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

            Разборы примерно в течение недели после контеста держатся в прямом эфире.

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

Hi,

Is it please possible to have as many rounds in the weekends as possible? For ex, the next div2 round is on monday and i don't see why it was not scheduled on sunday. For people from western europe the 7:30pm from russia is really bad during work days.

Thanks a lot!