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

Доброго дня, Codeforces!

Сегодня, 19:00 начнется первый раунд Открытого чемпионата Москвы и МО по программированию (КРОК).

Это будет обыкновенный двухчасовой Codeforces раунд со взломами и падением баллов во время соревнования. В Раунд 1 допускаются все, кто прошел Квалификацию и зарегистрировался на соревнование. Также вне конкурса допускаются к участию все остальные зарегистрировавшиеся на раунд. Как обычно, раунд будет рейтинговым для всех. Для прохождения в Раунд 2, Вам нужно набрать не меньше баллов, чем участник на 300-ом месте (при условии положительного числа набранных баллов).

В раунде вас ждут несколько задач, примерно расположенных по возрастанию сложности. Разбалловка за задачи стандартная (500-1000-1500-2000-2500). Во время раунда задачи тестируются системой только на претестах, а системное тестирование состоится после окончания соревнования. Претесты не покрывают все возможные случаи входных данных, так что тщательно тестируйте свои программы!

До окончания раунда категорически запрещается публиковать где-либо условия задач/решения/какие-либо мысли и соображения о них. Запрещено общаться на тему задач, обсуждать условия и проч. Будьте честными и пусть в Раунд 2 пройдут сильнейшие. После того как раунд завершится, можно будет обсуждать задачи и решения.

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

В подготовке сегодняшнего раунда участвовали: Ripatti, havaliza, haas, RAD, Gerald, MikeMirzayanov, Delinur. Огромное всем им спасибо за проделанную работу!

Всем удачного Раунда!

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

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

Рейтинг будет пересчитан для каждого дивизиона в отдельности?

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

Сюда кажется забыли запилить пост.

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

Не отсылается решение, множественные сообщения с багом и женщиной. Пробелы вставлять не помогает.

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

    Послалось, когда удалил половину ненужных инклудов и using namespace std.

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

Admin plz look in to it. I received a mail that I qualified for round 1 and I also registered for round 1 as usual but now I am trying to submit solutions but it gives me access denied what is the problem admin plz look into it asap.

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

Расскажите, как решать С, пожалуйста.

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

    Спираль размера k+2 — это квадратик минус спираль размера k минус еще одна клетка. Спиралей куб, каждую пересчитываем из спирали меньшего порядка за O(1). Перебрали все, сказали ответ.

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

    Заметим, что квадрат размера k лежит в середине квадрата k+4. далее понятно

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

    Пусть d[r][c] -- сумма в спирали размера k - 2, начинающейся в клетке (r, c); nd[r][c] -- то же самое для спирали размера k. sum(r, c, k) -- сумма в квадрате размера k; a -- исходный массив. Тогда nd[r][c] = sum(r, c, k) - a[r + 1][c] - d[r + 1][c + 1]. Так можно пересчитывать d от k - 2 к k и каждый раз проверять все ячейки. Сложность O(n·m·min(n, m)).

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

    хм, а я начинал с каждой клетки раскручивать спираль с центра... раскручивал не по клеточкам, а отрезками и когда на очередном витке получалась корректная спираль, то проверял с ответом... сложность O(N3), но отнимать спиральки круче, у меня более косячное решение...

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

На чем ломали A и B?

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

    на ТЛ?

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

      Да.

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

        Что, много кто 2 * 109 засылал? У меня в комнате ни одного не было

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

          Скажите пожалуйста,мне не понятно, надо ли было делать защиту на ввод больше 2 * 10^9 в задаче А?

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

            Входные данные всегда корректны и соответствуют условию

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

            Дело в том, что если ваша программа делает n операций, при этом n равно 2 * 10 ^ 9 — это не укладывается в ограничения по времени, слишком медленно. А проверку ввода делать не обязательно.

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

            Если вы о вводе взлома, то там проверяется, что все входные данные подходят под условие.

            Если про задачу в целом, то это, чтобы можно было использовать стандартный 32битный тип, даже не знаю как использовать 64битный в своем языке.

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

      Сейчас, как всегда, найдется толпа тех, у кого 2*10^9 зашло)

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

        UPD: только поняла, как решали влоб(вначале показалось, что копировали строку и проверяли)

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

    На тупом проходе по обеим строкам, что получало TL, например, на тесте:

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

    B: 4 4 .#.. ..## .#.# ..#. нельзя решать for i 1-n for j 1-m

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

    на В ломали на ТЛ видимо тестами 1000 1000 где последняя строка заполнена точками (и подобное)

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

      1000 1000 где все звёздочки тоже успешно ломалось (меня так взломали)

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

Умудрился прочитать в самом начале тура C D как "3 наместника, каждому по n/3 городов". Только за двадцать минут до конца решил всё-таки перечитать сэмпл, понял, что я дурак, и засабмитил на последней минуте.

Хороший контест.

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

Я люблю тебя, C++!!:D

ML — наш вердикт!

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

Мне не понятно, как будут пересчитывать рейтинг? Отделят дивизионы и пересчитают внутри своего дива?

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

The problems were quite tricky. I've hacked someone at every problem I've solved (A,B,C) :-)

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

Wooooo~~,how exciting for the first time!

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

Как D решалась?

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

    Чуть-чуть случаев. Разбили на две доли. Либо в обеих долях количество вершин делится на три (тогда очевидно), либо в одной остаток 1, в другой — два. Будем считать, что в первой — один.

    Теперь если в первой доле есть вершина, не соединённая хотя бы с двумя из второй, убиваем этот треугольник, дальше — очевидно. Иначе в ответе, если он есть, бывают только тройки из одной доли или тройки ("2 из первой", "1 из второй"). Очевидно, что вторых троек будет 2 по модулю три, иначе не сойдутся остатки. Также в ответе, если он есть, можно сделать так, чтобы вторых троек было ровно две. Отлично. Нашли все вершины из второй доли, несоединённые хотя бы с двумя из первой, взяли две любые, выкинули два треугольника, дальше — очевидно

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

      Только там есть ещё несколько случаев, когда граф несвязный.

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

        А в чём проблема несвязного графа?

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

          Ну вот, у вас упало. В том, что если есть несколько компонент, доли каждой компоненты можно раскидать в долям всего графа двумя способами. Поэтому нельзя сразу абы как раскидать их по долям.

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

            Всё равно непонятно. Я в своих рассуждениях нигде не пользуюсь ни связностью, ни тем, что разбиение на доли единственно. Когда доказываю отсутствие ответа — мне всё равно, из какого разбиения на доли он был получен.

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

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

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

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

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

            Упала, потому что в одном месте вместо <= написал <

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

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

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

          Когда компонент несколько надо разобраться с тем, как доли компонент раскидать по глобальным долям.

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

            Если решение существует, то оно существует для любого варианта раскидывания, разве не так?

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

              Похоже что так, у меня прошло. Либо я очень везучий :)

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

              Нет. Например: 6 4 1 2 2 3 4 5 5 6 Если выбрать доли 1,3,4,6 и 2,5 — то решения нет. А если 1,3,5 и 2,4,6 — то есть

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

                (1,3,5) (4,6,2) — решение, см. последний случай

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

    Раскидаем каким угодно образом наши города по берегам. Обозначим количество на городов на левом берегу a и на правом берегу b. Тогда если , то ответ очевиден (разбить на тройки на берегах). Если , то поменяем города берегами, тогда станет . Теперь попробуем найти на левом берегу город, у которого нет моста с двумя городами на правом берегу. Если такой имеется, то удалив эту "троицу" переходим к случаю когда . Вот, а теперь на чем всех ломались. Рассмотрим тест:

    6 4
    1 2
    3 2
    4 5
    6 5
    

    Т.е. для города на левом берегу не нашлось такого города, тогда в таком случаи должно найтись два город на правом берегу, которые не соединены с двумя городами не левом берегу и так чтобы все 4 города которые мы выбираем на левом берегу были различные. Но раз до этого мы не нашли слева города, который не соединен мостом с более чем один городом, значит он не соединен максимум с одним и для поиска двух наших городов справа можно использовать жадный алгоритм. И опять же после удаления двух "троиц" мы переходим к случаю .

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

I will comeback next time!

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

тот факт, что я опоздал на контест на 30 мин, не испортило мне впечатление от контеста. замечательный контест

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

Взлом вслепую... мне сегодня везет...

02:00:00 D Успешный взлом участника...

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

Is there going to be any wild card round like we saw in VK cup??

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

Были какие-то баги с отправкой. Из-за этого на минуту позже отправил A и C :(

Отправлял через выбор файла, при нажатии кнопки Отослать появлялась страничка с Access denied. Видимо, потому что страница долго была неактивной — со второго раза получалось нормально.

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

For problem B, if using DFS, what's the time and space complexity?

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

    Can you explain how do you find shortest path with dfs?

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

      You would need to include the distance in the state. This makes the time and space complexity quite large for this problem, but I guess that if in another problem, you really wanted to do it, you can do it.

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

        For this problem, I guess the risk is not high time complexity but stack overflow?

        If someone thought it can be solved by DFS, please let me know.

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

          It is both, I think the maximum result for the distance is around 2000 , so 2000*1000*1000 sounds slow even if you deal with the stack overflow.

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

            How did you get 2000*1000*1000? What's about BFS when the result is 2000?

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

              Talking about DFS, and since you need to include the distance in the state, and the maximum distance is 2000, and there are 1000x1000 cells, then a very sloppy estimation is 2000*1000*1000 (I bet it is much smaller with cropping, but still).

              In BFS (Actually a Dijkstra variation), the distance is not part of the state, so this is not a problem.

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

                Let the function prototype be dfs(x,y,dist,dir). The stop condition of the recurrence is x == n-1 or y == m-1. So param dist is not a decisive factor of time complexity but only stack usage.

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

                  In a DFS, You can visit different (x,y,dir)s with different distance values.

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

                  That's right. But I still thought 2000*1000*1000 is a wrong way to estimate although I agree DFS might be slow.

                  I will try to implement a DFS version which passed systest or failed due to TLE. We may discuss further via private messages then. Thanks.

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

    For problem B, unsuccessful solution was Dijkstra with O(n^2 + m). On 1000 1000 with all #: n = 10^6, m = 2 * 10^9. 2 * 10^9 + 10^6 is TL.

    DFS was even a more stupid idea, i think.

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

      Depends on how you build graph

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

        Yes, but I wrote this to show the solution which passes pre-tests, but is not correct

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

          you can make every point in a number. It only cost 20 long long to represent a line. so the build graph time is O(n*m*20)

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

По-разному перегружать одну и ту же функцию для int и Integer — это жесть...

ArrayList a; int i; a.remove(i); // пытается удалить по индексу

Integer j; a.remove(j); // пытается удалить число j из массива

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

    А зачем использовать Integer? Оно только между угловых скобок нужно, в остальных случаях int не хуже

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

      В том-то и проблема, что я использовал int, а мне надо было удалять конкретное число из массива. Теперь буду внимательнее смотреть на то, какая функция вызывается в действительности.

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

        В какой задаче так надо делать? Удалять число из массива это как бы долго.

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

          Я в D так делал. Когда уже выделил 3 или 6 вершин с разных берегов, которые можно соединить, я их удалял. После этого на каждом берегу оставалось количество городов, кратное 3, и все легко делилось. Можно было и без этого обойтись, но я никак не думал напороться на подобное.

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

            ОК, я-то D не решил)

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

              Я тоже — не успел разобраться, в чем дело. Хотя может решение и так неправильное. Посмотрим на дорешивании, когда откроют.

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

    list.remove((Integer) i)

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

Is the result of the last query in the sample case of Problem E right?

n = 5, k = 1, r's and a's are given as (1 5 4 1 2) and (4 4 3 2 2), respectively, and the last query asks if the 1st and the 4th members can be together in a group. But their age difference is 2, which exceed k(= 1), so they cannot be in the same group.

My misunderstanding or what?

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

    Condition on ages doesn't look like "no 2 members have ages with difference greater than k", but like "each age of the member of the group should have difference no greater than k with group leader".

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

      I see, but the problem also requires that one of the two members given in the query be the leader, doesn't it?

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

Интересные очень задачи, мне понравились, жаль только что я не смог найти баг в задачах А и Б, а через 5 минут после контеста нашел! Готов поспорить что такое бывает с каждым :)

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

    tourist, не, не слышал.

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

      У него такое тоже бывает.

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

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

      Надо сделать новое звание, с рейтингом 2900+, и с названием турист.

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

    У меня B 2 раза упала на претесте 6, потом перечитал условие, оказалось, забыл, что надо -1 выводить, если нет решения -_-

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

Overly long explanations for Problems A, B and C

I liked this contest, wish I didn't fail so much in problem A so I could have tried D.

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

    One cute way of solving C without using the "shape" array is to define a spiral of size 1 as simply a single square. The recurrence then follows quite naturally for larger spirals.

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

Как там писал Шмелев? Снимите с меня весь рейтинг за сегодняшний контест! Перепосылка по А из-за того что у меня ножницы режут камень, час тупости над В когда не мог правильно посчитать асимптотику решения и еще не сданная С из-за косяка в реализации. Фак мой мозг.

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

На вторую Дейкстра плохо заходит:(

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

    +1. Меня на ней ещё и взломали =(

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

      Так тебе же лучше, что взломали. Раньше узнал — лучше срегаировал

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

        Так-то оно да, только взломали за 10 минут до конца )

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

      Та вроде все ок должно быть. Надо немного аккуратней написать, наверное...

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

    Зачем извращаться с дейкстрой? Сила BFS с нами.

    Я вот мог в красные пойти, благодаря таким вот Дейкстристам, Флойдистам и т.д. Но вот затупил во второй, тоже (сначала просто жадность написал)... И этим умножил свое итоговое место на 2.

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

      Спасибо мне? :)

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

      У меня все точно так же печально... Сейчас попробую под Делфи сдать, обычно в 2-3 раза быстрее работает... Обидно будет, если пройдет.

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

    И это хорошо!

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

    Граф же невзвешенный!

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

      Ну у меня получился 1-0 граф. Я понимал, что все должно быть проще, но придумав Дейкстру, решил сразу писать.

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

        На таких графах можно дек писать... и вот он бы тут прошел... лентяй я...

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

      Можно считать только переходы в соседние и повороты, и будет 0-1 граф с O(MN) ребрами.

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

        Я там явно граф не строил, а просто перебирал в BFS для данного x все y, если мы еще этого не делали, и для данного y — все x, если мы еще этого не делали. В сумме таких переборов будет N + M.

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

          Я тоже явно не строил. Вообще, у этой задачи стопицот разных решений. Каждый писал, что приходило в голову. =)

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

            Только далеко не все сис. тесты проходило:)

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

        А можно рассмотреть двудольный граф из столбцов и строк.

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

          То есть, ее все-таки можно было решать Дейкстрой. =) Круто.

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

Откройте дорешивание плиз)

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

I don't remember when I was so lucky as in this contest, watching the system test was too exciting... (I fell to place 300)

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

why there is no practice after the contest? and the problems are not available in problemset also.

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

Можно ли подобрать такие n и m, чтобы было a^n = b^m.

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

Why is Dijsktra for B too slow? 1000 * 1000 * lg(1000000) * 4 = 80 million, which should be doable in 2 seconds. Unless the server is very slow today ... :(

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

    True story

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

    It's kind of pointless to use Dijkstra when your graph only contains edges of weight 1. ;)

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

      0 and 1.
      But BFS is enough, throught

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

        BFS when weights are 0 or 1 is Dijkstra, just optimized for such low edge weights.

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

          Use deque and it's still BFS.

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

            Yes. Boundaries between these algorithms are not so crispy. A BFS when weights are 0 or 1 is both a BFS and Dijkstra :)

            Even with normal BFS using a single queue, if you use it to find the shortest path, you are applying Dijkstra's idea. The original Dijkstra algorithm didn't use a heap. It was just the concept to expand the current shortest path first. When you do a BFS to calculate the minimum path, you do exactly that. Specially if you use a deque, you are no longer just doing a search, you are already following the same algo but with a deque instead of a heap.

            So, Dijkstra works in this algorithm, just use a Deque instead of a heap.

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

              Can you please share how you use to a deque to make it work?

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

                Some edges have cost 0 and some edges have cost 1.

                Normally, you have a queue and push all edges to the back of the queue.

                If you have a deque, you can push edges that do not increase the current distance (edges of cost 0) to the front of the deque. And edges that increase the distance, cost 1 to the back of the deque. Afterwards, it is the same as a BFS.

                It works because it guarantees the node with the shortest distance is always at the front of the deque.

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

    There was no need to write Dijkstra, especially with heap. Didn't you think about any simpler solution?

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

    The complexity of Dijkstra with a heap is O( log(|V|) x (|V| + |E|) ) I think that the usual Dijkstra solution has |E| around 4x4x1000x1000 and |V|=4x1000x1000 (There is a node for each pair between each cell and each of the 4 directions. And for each of those nodes, there are 4 edges towards other nodes in case the cell it is a column).

    Your complexity estimation seems to be |V|x log(number of cells), quite smaller. O( log(|V|) x (|V| + |E|) ) is 5 times larger and yields 9 digits.

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

      I see, I missed out the number of edges. So I need around 400 million operations in the worst case.

      Still, that is on the order of 100 million operations, so it should pass? =D

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

        Set has a high constant (as compared to others algo like bfs..), so it would not pass

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

I see many people (including me) got WA on pretest 5 in problem C. I think the problem is setting the initial maximum value to 0. We should set it to a large negative value.

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

Написал правильное решение по A, лишь в строке

if (m*k<=n)

неправильно поставил знак :(

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

Неужели КРОК запретил CF юзать свои задачи в дорешке?

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

    СВОИ задачи? С каких пор они принадлежат КРОКу, если авторы (как я думаю) никакого отношения к КРОКу не имеют?

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

      Капитан Прямолинейность?

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

        Окей, как тут можно понять криволинейно?

        свои == принадлежат тебе

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

Может мне кто пояснит, в чём проблема этого решения по B? Не вижу причины TL. Заранее спасибо.

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

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

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

    Нет проверки цвета строки (столбца) при добавлении в очередь, из-за этого в худшем случае в ней будет n*m элементов вместо n+m и общая сложность будет O(n*m*(n+m))

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

      Не согласен, всё присутствует if (a[i][nom]=='#' && (!b[i][nom])){ if (a[nom][i]=='#' && (!b[nom][i])){

      Запуск на MS и GNU C++:
      1484918 06.04.2012 22:06:14 Commandos B — Тайная комната MS C++ Полное решение 360 мс 29800 КБ
      1484905 06.04.2012 22:05:34 Commandos B — Тайная комната GNU C++ Превышено ограничение времени на тесте 46 2000 мс 14600 КБ

      Код одинаковый

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

        Согласен, был неправ, замена list на vector помогает: http://codeforces.com/contest/173/submission/1485048

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

          Да, помогает, но всё-таки это жутко подозрительно, когда скорость работы программы отличается на 2 компиляторах в 5 раз

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

            Не в компиляторе дело. list это связный список, почти любая операция с ним — cache miss, поэтому тормозит.

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

              Ну как сказать.. на MS стабильно проходит же, и очень быстро... А почему лист медленней понятно

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

                Возможно у MS другая реализация list'а

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

                  Перегружусь под дебиан, это уже интересно. Результат ниже...

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

          Не в первый раз вижу, как list тормозит. На каком-то из варшавских контестов в Петрозаводске чекер с list тоже работал очень долго (минуту?), а замена его на vector заставила работать ~6 секунд. Видимо, у самих поляков на другой ОС + другом размере кэша всё работало приемлемое время.

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

    у list'a в g++ size() за линию работает, возможно из-за этого

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

      Если так то точно из-за этого

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

      Поменял на !koords.empty()

      1485260 06.04.2012 22:43:46 Commandos B — Тайная комната GNU C++ Полное решение 450 мс 29800 КБ

      Так я ещё не разочаровывался...

      Локальные тесты (компилятор gcc version 4.4.5 (Debian 4.4.5-8))

      с koords.size():

      real 1m8.310s
      user 1m6.944s
      sys 0m0.196s


      с !koords.empty():

      real 0m0.160s
      user 0m0.144s
      sys 0m0.020s

      Причина очевидна.... Такой подставы не ждал :\ Постоянно пишу на компилятор GNU C++ :\

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

      Написал while(q.size()>0), зачем-то исправил на while(!q.empty()). Чувствую себя ясновидцем ^_^

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

Thanks for the great contest . There was lots of div 2 participants in the contest so please prepare more problems for div 2 like the VK 2 contest .

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

Сегодня столкнулся с одной проблемой. При посылке задачи А, используя компилятор Microsoft Visual C++ 2005+, правильное решение получило неправильный ответ на первом претесте, так как выдавало ответ 0 2 вместо 3 2. В то же время на GNU C++ 4.6 решение прошло.

Сократив код (это не решение задачи А), который способствует AC, я получил вот такой код, который зависит от компилятора на первом же тесте (0 2 вместо 3 2). Кто-то может объяснить, почему?

UPD. Если добавить в функцию win, в начало строку printf("smth\n"); то программа начинает работать правильно даже в VC++.

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

    а Вы пробовали без gets?

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

      Да, scanf; cin, getline со string'ами тоже пробовал. Результат тот же.

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

    Возможно одна из прог не дочитывает переход на новую строку в scanf(n)

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

      Пробовал в "Запуске" выводить строки после того, как считал. Все правильно, но тем не менее результат 0 2.

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

    K.I.S.S.!

    int n;
    string a, b;
    //...
    cin >> n >> a >> b;
    

    Отлично работает в сочетании с freopen!

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

      Да, работает просто отлично, сам раньше так писал. Но вот тут это не поможет, уже проверил. Проблема не в считывании строк.

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

    Да, да. Дело в win. Кажется это ошибки оптимизатора, он забывает свапать, так как дальше одинаковые строки идут.

    Если завершить win вот так

    ...
        if (A=='P' && B=='R') return ret;
        if( A == B )
            return 0;
        else {
            cout << A << B;
            exit(1);
        }
    }
    

    , то всё заработает. Но если убрать cout << A << B;, то программа не завершится.

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

      Да, спасибо, вполне вероятно. Кстати, если заменить swap на "ручной", то будет работать тоже. Если бы не эта проблема, то мог бы на 3 места выше оказаться :) С сегодняшнего дня буду тут все на гнушке сдавать.

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

    Очередные баги в оптимизаторе. Вот такой минимальный код в Debug выводит 1 1, а в Release — 0 0. Причем никакой assert или cerr уже не помогает.

    #include <iostream>
    
    using namespace std;
    
    int win(char A, char B)
    {
        if (A=='S' && B=='P') return -1;
        swap(A,B);
        if (A=='S' && B=='P') return 1;
        if (A=='P' && B=='R') return 1;
        return 0;
    }
    
    char *s0, *s1;
     
    int main()
    {
        s0 = "PP";
        s1 = "SS";
        for (int i = 0; i < 2; i++)
            cout << win(s0[i],s1[i]) << ' ';
    }
    
    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +1 Проголосовать: не нравится

      Спасибо. Да, плохо получается, когда баги не в решении, а в оптимизаторе... Хотя частично сам виноват, что копипасту сделал. Обычный цикл бы уже помог.

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

      В g++ работает нормально с -O2. В Visual C++ 2010 Express не работает.

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

I got about +10 hacks in A by using this case

2000000000
R
R

These hacks saved my score after failing A and B. I was so lucky. Nice contest, by the way! :)

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

Я ВЕРНУЛСЯ!

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

Не знаю как обстоит дело с другими задачами, а в E тесты были слабыми. У меня прошло решение 1484343 с тупым багом: не обрабатывается случай, когда у нескольких людей совпадает r. На тесте

4 1
2 2 1 1
2 1 1 3
1
3 4

оно выдаёт 3 вместо 4.

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

+0 rating change. This is the second time it happened to me!

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

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

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

Оххх, в 0.29 написал авторское решение по D, но в некоторых случаях забыл вывести "YES". Минут 35 искал ошибку, только после этого сдал B и C и только после этого сдал D в 1.45. КМП прямо-таки :)

Авторам спасибо за контест!

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

Can someonw tell me whats wrong in the submission(for Prob B)..Solution...

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

Можете объяснить реализацию задачи А. (разбор всмысле)

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

There's inconsistency in final standings and rank in member's profiles, take Petr for example, he finished 3rd, but on his profile page the graph shows Rank: 4

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

    There is one unofficial participant above Petr

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

      thanks for reply, I think usually official rank is displayed

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

        Rank shown in profile should be the rank used to calculate rating, which includes unofficial participants in this contest

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

Ну пипец.. Пропустил и очень обидно :(

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

    У меня так же получилось с VK Round 1. К счастью, там был wildcard...

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

Since the editorial doesn't seem to be coming, could someone share the ideas of their solutions to D and E?