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

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

Всем привет!

Сегодня, 12 июня, в день, когда Россия отмечает день себя, на Евро-2012 стартуют матчи второго круга, а I_love_natalia празднует свой день рождения, мы представляем вам Codeforces Round #124.

К подготовке контеста имеют отношение команда Samara SAU Teddy Bears (craus, dalex, Hohol) и I_love_natalia. Также спасибо Alex_KPR и команде Codeforces (Gerald, Delinur, MikeMirzayanov). Мы думаем, что контест очень легкий, а вам придется за 2 часа доказать или опровергнуть это утверждение :)

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

Всем полных решений и успешных взломов!

UPD. Контест закончился, поздравляем победителей!

Div-1 (полные результаты):

  1. tourist — единственный, кто решил все задачи!
  2. RAVEman
  3. aropan

Div-2 (полные результаты):

  1. bmerry
  2. littlefriend
  3. gstsclq

UPD 2. Доступен разбор задач.

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

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

Это правильно начинать контесты в 17:00 по Москве во время Евро.

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

Will the contest be ranked?

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

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

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

.

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

In ascending order by difficulty?

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

так рейтинговый раунд?

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

The contest doesn't seem to me as very easy :/

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

контест совсем не нравится =/

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

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

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

    Первая? По Вашему рейтингу могу предположить, что Вы во втором диве, и с уверенностью могу сказать, что первая задача была легкая. Нужно было чуть-чуть подумать и порисовать на листике. А можно и без листика совсем :)

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

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

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

Короткие, понятные условия! Вот все бы контесты были такими!

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

Subject narrative is a big problem! It's too fuzzy to read...

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

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

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

Хороший проблемсет, спасибо. Как E решается? Быстрее чем за квадрат строить минимальные остовные деревья в графах на кратчайших путях между всеми телепортами не умею :-(

UPD: Крууто! Мой личный рекорд — шестое место)

UPD2: Когда был одиннадцатым, в посте указали топ-10. Когда я шестой, в посте указывают топ-три. :-(

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

    А как это делается хотя бы за квадрат?

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

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

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

    Сперва идем к ближайшему порталу. Потом поддерживаем расстояние от множества взятых порталов до каждой вершины. Понятно, что каждый раз надо брать ближайший портал (примерно потому же, почему работает Прима). Можно заметить, что при обновлении расстояний каждая вершина срелаксируется не больше двух раз.

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

    Запустим дейкстру, подвесив все телепорты за фиктивную вершину ребрами веса 0, из фиктивной вершины. Получим дерево кратчайших путей, если можно начинать из любого телепорта. Утверждается, что в качестве ребер графа, состоящего из телепортов, достаточно взять ребра исходного, концы которого лежат в поддеревьях разных телепортов, а вес положить равным d[u] + d[v] + weight.

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

Ужас...
Расскажите А Div 2 пожалуйста.

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

Похож на первоапрельский контест :D

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

Капец задачи.

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

Скажите 8 тест задачи B(div2)?

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

    Проблема с ответом infinity. Надо проверять не только a[0], а и b[0]. Если их произведение положительно — ответ "Infinity", если же отрицательно — "-Infinity".

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

Что в четвёртом претесте D div2?

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

Собрал урожай хаков на задаче B. Хакал все условия, в которых замечал 3*n и 3*m =)

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

Почему данное решение по Д(див 2)/Б(див1) не проходит: Пройдём дфс-ом по лабиринту, пометив в матрице b[][] клетки лабиринта, далее пройдём ещё раз, и попав в точки на границе смотрим, принадлежит ли противоположная точка лабиринту.

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

Клевая задача С. Но задача, очень похожая на Б была на каком-то COCI, если я ничего не путаю. А как решались Д и Е?

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

What was the solution for Div2 problem A? I feel I'm missing something easy.

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

Nice questions...Short uncontradictory statements and all requiring to think..Although I did not perform well but still I got to learn a lot :)

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

Can someone please explain logic behind div 2 — A.

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

это неловкое чувство, когда засрал хороший раунд
кст, задача С уже однажны была

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

Не понял как так произошло: я отправил неверный взлом, а он отправился два раза: 42069 и 42071

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

for problem D , can anybody tell me whether my idea is correct ?? for grid with position S if you are able to go to another S in it's adjacant 4 grids , Then I can walk infinitely , ans will be YES, other wise No

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

"We think that contest is very easy" You are kidding, aren't you?

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

Как нормально делать В?

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

    У нас в диве у всех почти попадала...

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

    Я решал по принципу Дирихле. Будем ходить по бесконечному лабиринту, отмечая (в хэш-таблице) те клетки, в которых мы были. Если мы побывали хотя бы в m·n + 1 клетках — значит, две из них соответствуют одной и той же клетке исходного лабиринта, выходим из поиска и говорим, что ответ — Yes. Иначе — No.

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

    Я так делал:
    Проверим, можно ли двигаться бесконечно далеко вправо.
    Сожмем компоненты связности в вершины, рассматривать будем только те, в которые входит хотя бы одна крайняя клетка. Теперь добавим переходы через границы поля (ребра между соответствующими вершинами). Вверх и вниз переходить можно бесплатно, перейти вправо стоит -1, влево 1.
    Теперь, если в полученном графе есть цикл отрицательного веса, мы можем уйти сколь угодно далеко вправо, иначе нет.
    Точно так же проверяем остальные 3 направления.

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

Как решать С быстрее, чем за O(n2 * logn)?

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

    А зачем быстрее?

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

      У меня не прошло =( Хотя, наверное, использовать atan2 для сравнения углов не стоило.

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

        У меня WA. Но по времени времени вроде нормально.

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

          Возможно, я где-то набажил, попробую в дорешивании без atan2. А так у меня даже претесты не прошло.

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

            Кстати, никто не знает, как atan2 по точности валить? У нас не получилось :(

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

              Можно дробями вида n число фибоначи поделить на n+1

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

                Да нет, чтобы найти два веткора, atan2 от которых совпадает, не нужно так мудрить — вектор (10^9 + 1, 10^9) и вектор (10^9, 10^9 — 1).

                Тяжелее сделать так, чтобы на нём действительно падали решения. Я ниже описал, как это можно сделать.

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

                  Ну если продолжать мудрить =) то понятно, что можно генерировать цепные дроби с общим началом... просто тогда разница углов будет маленькая порядка квадрата кординат и запас по кординатам будет большой.

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

              Понятно как. Принципиально бывает четыре направления прохода в обычных решениях — сверху, слева, снизу и справа. Например, если идём сверху, делаете такой тест из четырёх точек: (X, X + 2), (-X, -X), (-X, -X — 1), (-X + 1, -X), где X ~ 10^9 и дерево (1-2), (2-3), (1-4). Тогда три нижних точки слипнутся в одну по точности, и если перебрать их все три перестановки, и перебрать некоторое количество перестановок вершин дерева (в зависимости от того, что подвешивается в решении), на одном из таких тестов точно будет WA.

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

                Я генерил такие тесты: точка (0 0) (туда пойдет корень дерева) и штук 20-30 точек с координатами около (109, 109). Кажется, после первого захода в рекурсию в поддеревьях как раз получается то, что ты говоришь. Это тесты 61-80. Я прогонял стресс, и atan2 не падал...

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

                  Как раз atan2(109, 109 - 1) достаточно отличается от atan2(109 + 1, 109). Нужно было ставить корень дерева в ( - 109,  - 109), тогда double падает. Но long double вроде бы все равно никак не завалить.

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

                  Так смысл не в том. Смысл в том, что atan2(1e9+1, 1e9) == atan2(1e9, 1e9-1). Поэтому если дать в качестве точек эти две, то их если их поменять во входных данных, то они поменяются местами и после сортировки. Поэтому верно и на тесте где они идут в таком порядке, и на тесте, где они идут в обратном программа отработать не сможет — в хотя бы одном из них сортировка окажется некорректной. Осталось только сделать так, чтобы некорректная сортировка повлекла за собой WA. А это можно сделать, как я описал выше.

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

                  Неправда. Только что проверил — (atan2(10^9, 10^9 — 1) == atan2(10^9 + 1, 10^9)) == true. На практике atan2 можно использовать до 10^7, потому что double держит порядка 15 значащих цифр.

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

                  Действительно, в g++: (atan2(10^9, 10^9—1) == atan2(10^9+1, 10^9)) == true в MS C++: (atan2(10^9, 10^9—1) == atan2(10^9+1, 10^9)) == false

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

    Мой O(n^2 logn) зашёл, 270 мс на макстесте.

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

    Ну, к примеру, можно отсортить все точки по x, потом написать процедуру solve(l,r,v), которая решает задачу для поддерева вершины v, используя еще неиспользованные точки, лежащие между l и r по иксу (в сжатых координатах). Эта процедура будет разбивать неиспользованные точки на отрезки с кол-вом точек, соответствующем кол-ву вершин в поддереве соответствующего ребенка v, а потом рекурсивно запускаться в этих отрезках.

    UPD: упс, не зашло =(

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

    А, собственно, как вообще её решать, раз то, что написал tunyash, неверно?

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

      Будем рекурсивно отдавать точки вершинам дерева. Сначала одним DFS'ом подвесим дерево за вершину 1 и посчитаем размеры поддеревьев.

      Сделаем рекурсивную процедуру, которая набор точек будет раздавать поддереву вершины x. Самую высокую точку из набора отдадим корню x поддерева. Относительно неё посортируем по углу все остальные точки набора векторным произведением (так как они ниже), и отдадим по очереди каждому сыну y очередные sz[y] точек. Тем самым мы гарантируем, что всё поддерево окажется целиком внутри угла с вершиной x, причём для разных поддеревьев углы не будут пересекаться. Победа!

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

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

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

      Да в лоб.

      Подвесим дерево за какую-нибудь вершину и обозначим ее R.

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

      Дальше у вершины R в дереве есть поддеревья, в которых N1, N2, ..., Nk вершин. Разделим отсортированные точки на группы соответствующих размеров, в каждой группе выберем корень (наименьшую в исходном порядке вершину) и запустимся рекурсивно.

      Асимптотика . Если сортировать по векторным произведениям, то очень быстро.

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

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

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

          UPD: лажа! Можно каждый раз выбирать центр дерева. Точнее вершину, такую что размер самого большого поддерева не очень большой. Это можно сделать за линию. Тогда казалось бы будет Nlog2N

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

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

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

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

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

Ну почему, блин, сторого больший??? Ненависть!!! :(

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

150 и 250 место разделяет 10 баллов. Мило.

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

I wonder how many people just guessed the answer to div2-A, without actually proving it. (I got to a proof, after I finally submitted the guessed one.)

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

за что дают вердикт "Попытка игнорирована"?

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

Этот неловкий момент, когда ответы одинаковые, но уже ничего не сделаешь ( Вывод 9/-2 Ответ -9/2

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

Happy birthdays dalex and I_love_natalia! The problems are nice. By the way, the start time is unusual, that makes me late for some minutes.

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

Div1-A is exactly the same as SRM 518's Largest Subsequence, except that the constraint is larger... This might have given unfair advantage to those who have seen it before.

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

What is the intended algorithm for 196C - Нарисуйте дерево? How about flipping the pairs of intersecting segments and iterate until there are no more? Would this pass the time constraint?

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

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

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

You will have to add a new level above IGM.

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

Проблема с задачей A(div2). Тест: 5 2 1 Ответ: Second У bmerry выводит First и полное решение. Если я ошибаюсь, напишите в чем.

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

    Ответ верный, 1*2 <= 2 && 1*2 <= 5

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

      Да, согласен. Если посмотрим на полное решение проверяется так.Но, попробуй на тетрадке этот тест написать. Объяснение: 1) Первый игрок на любое место может поставить тарелку. 2) Второй игрок по-любому может поставить тарелку.
      3) Хоть куда 2 игрок поставить тарелку 1 игрок не сможет поставить тарелку.

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

        Ставим тарелку в середину. Справа и слева остается по 1.5. Следовательно второй игрок поставить не сможет

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

          Спасибо:) Блин, весь контест думал что кординаты целыми должны быть.

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

            За контест думал над ней минут десять максимум, потом переключился на вторую и третью. А после дебажил почти полтора часа 4ую... А оказалось решение было в корне не верное :) Жалко, что до первой не допер, прикольная

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

    аналогично не понятно, поч. в тесте 11 4 2 ответ First, а не Second int A, B, R; cin >> A >> B >> R; R *= 2; if (A < R || B < R) cout << "Second\n"; else cout << "First\n"; return 0; это AC код Если что в данном тесте можно понять, что тарелки можно ставить по абсциссе 2, и в не зависимости от координаты второй игрок может поставить ещё 1 тарелку

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

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

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

Все понял. Буду в след. раз тщательнее читать условие) Спасибо всем за ответы.

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

A — баян, была на SRM #никто-не-помнит-когда, B — баян, была на СОСИ-контесте, C — баян, я на нашем закрытом бобруйском сервере решал, D — баян, я в детском саду такими задачами девочек смущал, E — баян, я такое вчера выдумал по пьяни!

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

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

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

Спасибо за отличный контест)))

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

thankstosamarasauteddybearsforthiscontest

Спасибо, контест очень понравился и не обнаружила лично для себя ни одного бояна.

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

Hello, I suppose it's better if you use just ordinary math. not something that like limit. I don't have any information about it. It's better if you would use some algorithmic problem or other problems related to programming instead of pure math. just my recommendation. I'm not a very professional participant. just participating here and don't know about other places. it's just a recommendation. and anyhow I appreciate your hard work for creating such a great contest. thanks.

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

really liked the content, although i found it difficult. particularly task A, which in my opinion was rather the hardest than the easiest... good job, guys!! :)

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

Так всё же, в D неправильно делать так: найти сначала первую позицию, где всё плохо, и сказать, что всё до этой позиции мы оставляем (ну или пробуем максимум ещё один символ удалить — на всякий случай), в эту позицию мы перебираем что ставить, а дальше восстанавливаем минимально-жадно (в некотором роде перебором с откатами)? Нечёткое место тут, кажется, одно — это то, правда ли можно оставлять без изменений всю строку до первого палева.

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

    Иногда в переборе с откатами (если я правильно понял, что это) надо откатываться левее первого палева: 2 ayzy. Но, казалось бы, такая ситуация не может возникнуть больше одного раза, так что все хорошо. Сам я не сдал, могу ошибаться.

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

      А, всё, понятно, где это палится. На таком простом тесте:

      "10 azzzzzzzzzza" (буква z повторена 10 раз)

      Первое палево случится на последней букве z, однако чтобы получить ответ, надо будет откатиться аж до буквы 'a'. Да, надо было всё решение оформлять в виде этого "перебора", или же как-то умно перескакивать назад к последней не-z-букве.

      UPD перебор зашёл, видимо потому, что такие длинные откаты нужны только один раз.

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

Any idea why my practice solution for div1 E TLEs (http://mirror.codeforces.com/contest/196/submission/1798783 ), while RAVEman's (slightly modified version: http://mirror.codeforces.com/contest/196/submission/1798819) easily passes? Both use Prim's algorithm in almost the same way. I went over his code line by line and can't find the key improvement.

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

    I found 2 reason. 1. set is slightly slow than priority_queue so you solution take much more time. 2. test case is not strong enough. the way you choose start vertex is different from RAVEman (Reminder : portal might not be in order in input), he's lucky so choose largest portal number pass in time, but choose lastest portal number (in input) not.

    After I fix #2 in your code to the same way as RAVEman , it's TLE at test case #39 1799522 and after I fix both #1 and #2 it's pass in 300 ms

    UPD. fix font size

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

      That's bad, I was too imprudent :( These solutions get TLE on 'reversed' test 36 where any vertex i is renamed to n - i + 1.

      UPD: New tests (76-95) were added. Try to pass them.

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

      Thanks!! I'm surprised set vs priority_queue would make such a big difference. TopCoder's STL tutorial says "the difference is about ~%0.1 of time", yet RAVEman passed test case #39 in only 50 ms. When I tried his code with set 1798838, it failed case #39.

      As for the other reason, it seems the problem is that non-portal vertices can be visited multiple times. I haven't thought of a solution for this yet...

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

        Actually, the set vs priority_queue issue might just be another vertex ordering problem in disguise. Submission 1801347 also fails case #39 even though the only change from the "modified RAVEman code" in my first post is changing the priority_queue< pl > to a priority_queue< pl, vector< pl >, greater< pl > >.

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

          Alright, someone explained the real solution so I went ahead and implemented it! The trick is to make a sparse version of the graph of vertices which have portals. The "edges" in the portal MST will be shortest paths between pairs of portals in the original graph. There could be n^2 of these, but we don't actually need them all. MST edges are always minimum weight among edges in some cut of the graph. This solution is guaranteed to include all such edges.

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

          Yeah, I just got lucky. I had just 15 minutes after I submitted D till the end of the round, so I decided to submit the most stupid solution that I could think of...

          Usually that strategy works pretty well for me :)

          And thanks for noticing the crap I wrote. This made me read the editorial to understand the intended solution.

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

            Defeating the judge in 10 minutes is quite amazing ;)

            It's nice to see a growing community around programming competitions; I still have lots to learn from all of you! (this was my first time coding MST)

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

In Div-2 Problem-B:

Test Case: 8

3 2
4 3 1 2
-5 7 0

Why the answer is "-Infinity" instead of "Infinity"?

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

Разбор задач скоро появится?

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

Input
cantouristsolveitlessthaninoneminute

Output
unfortunately, he can't
but he solved all problems less than 100 minutes

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

/*found my mistake*/

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

right