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

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

Приглашаем вас поучаствовать в турнире трех четвертьфиналов — командном онлайн-соревновании, которое будет проводиться параллельно с четвертьфиналами ACM в Москве, Минске и Санкт-Петербурге в конце октября. Турнир будет организован совместными усилиями команды Яндекс.Contest, Олега Христенко (snarknews) и жюри перечисленных четвертьфиналов ACM ICPC. Даты и времена проведения: Московский ЧФ (регистрация) — 21 октября, 14:00 по Москве, Минский ЧФ (регистрация) — 28 октября, 11:00 по Москве, ЧФ в Санкт-Петербурге (регистрация) — 3 ноября в 12:00 по Москве.

Команды, участвующие в официальной версии одного из четвертьфиналов, могут поучаствовать в онлайн-версиях остальных четвертьфиналов. Команды, не участвующие ни в одном из официальных четвертьфиналов, могут принять участие онлайн во всех трех раундах. Результаты каждой команды на всех соревнованиях, официальных и неофициальных, будут учтены, итоговый зачет турнира будет производиться по системе Гран При 30.

Регистрация на онлайн-версию каждого четвертьфинала идет непрерывно вплоть до старта соревнования. Создать команду в системе Яндекс.Contest вы можете по ссылке «Мои команды». Все приглашенные в команду участники должны подтвердить своё участие в соревновании. После успешного создания команды необходимо зарегистрироваться на соревнование, указав вашу команду.

Правила отдельных раундов совпадают с правилами официальных четвертьфиналов.

Потренироваться сдавать задачи в системе Яндекс.Contest можно, приняв участие в A + B virtual.

На ваши вопросы и комментарии к этому посту могут отвечать несколько человек, кроме меня: Владимир Тен (vtenity), Лев Толмачев (lev.tolmachev), Виталик Гольдштейн (goldvitaly), Олег Христенко (snarknews).

Следите за обновлениями!

UPD. Онлайн раунд московского четвертьфинала стартует 21 октября в 14:00 по Москве, чтобы все могли поучаствовать в Codeforces Round 146 и CodeChef cook-off.

UPD.2 Появились ссылки для регистрации на все три ЧФ и точные времена их проведения:

  1. Московский ЧФ21 октября, 14:00 по Москве.
  2. Минский ЧФ28 октября, 11:00 по Москве.
  3. ЧФ в Санкт-Петербурге3 ноября в 12:00 по Москве.

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

UPD.4 Опубликован объединенный монитор двух прошедших туров по системе Гран При 30. В случае равенства очков по системе Гран При 30 мы дополнительно ранжируем команды по суммарному рейтингу по системе ИТМО, как на Открытом Кубке. Приносим свои извинения, что система разрешения ничьих не была опубликована изначально. Обращаем внимание команд, что склейка результатов производится по отображаемому имени. Команды, у которых не склеились результаты, отписывайтесь в комментариях. В третьем раунде проставьте себе ровно такое же отображаемое имя, как имя в объединенном мониторе. Мы даже собираемся с началом третьего раунда (точнее, как только хотя бы одна команда совершит посылку) в объединенный монитор добавить и третий раунд и надеемся, что объединенный монитор после этого будет показывать текущую ситуацию в каждый момент времени с учетом положения команд в третьем раунде турнира. Ясно, что для команд, участвующих в официальном четвертьфинале в Санкт-Петербурге, изменятся отображаемые имена, и потребуется некоторое время на их склейку.

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

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

Что слышно о заявленом мероприятии? Состоится? Осталась неделя до Московского ЧФ и хотелось бы иметь информацию для планирования тренировок и участия в контестах.

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

    Состоится. Опубликовал обновление с более точными датами. Ссылки на контесты появятся чуть позже.

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

      Неудачно как-то на 21-е попадает: Московский ЧФ пересекается с CF 146. А вечером еще CodeChef Cook-off (Гена проводит).

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

        Ок, проведем с 14:00 до 19:00, чтобы можно было с 11:00 до 13:00 написать CF 146, а с 20:00 CodeChef.

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

          Виртуальное участие потом будет, да?

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

            Будет, но уже вне конкурса.

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

              Вот еще что хочется спросить про виртуальное участие: можно ли начать виртуальный контест, скажем, в 13-00, если настоящий начинается в 11-00?

              Потому что на Codeforces, например, надо ждать окончания настоящего контеста.

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

          бывает же такое, авторы все-таки прислушиваются к мнению участников, и переносят... круто

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

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

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

А на английском языке задачи будут?

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

    Вообще-то вроде все соревнования официальной ветки ACM ICPC — с задачами исключительно на английском языке.

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

      Спасибо, просто хотел убедиться.

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

      В прошлые годы на Западно-Сибирском четвертьфинале задачи вроде были на русском.

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

А можно отрегистрироваться, и заново зарегистрироваться, если состав команды поменялся? А то в списке зарегистрированных состав команды не изменился. Или же просто не обновился?

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

А где задачи, а то соревнование уже началось?

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

Условия задачи выдают "Сервис временно недоступен"

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

У меня одного сервис временно недоступен?

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

can't download problem statement (PDF file)

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

Походу все контесты сегодня будут откладывать на 10 минут)

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

Теперь задачи из пробного тура :)

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

У меня одного такие опасные задачи по ссылке?

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

Да что за фигня. Теперь там задачи пробного тура Яндекс тренировок.

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

Что-то никто ничего не пишет, у вас уже работает? У меня все еще кроме ленты новостей ничего не грузится(соревнования пустая страница).

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

    Уже 45 минут контест идет. Пустая страница — какая-то старая версия браузера, видимо. Я сам на это когда-то жаловался, обещали поправить...

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

Как-то не хватает часов с остатком времени рядом с табличкой.

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

За какую сложность решалась B? У меня динамика за O(N·A3·B2) получает ТЛ 9. Надо было ее оптимизировать или можно проще?

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

    А там что, надо 3 билета держать на руках????

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

    У меня сложность, кажется, O(n B^4 A log что-то), но много отсекается. Решение такое. Сразу поэлементно сложим последовательности, получим последовательность из n нулей, единиц и двоек. Будем двигать окно длиной B по дням. Для каждого положения будем хранить мапу из кортежа значений в этом окне в минимальное количество действий, чтобы такого кортежа достичь (обнулив все левее окна и не трогая все правее). Но будем рассматривать не все кортежи, а только "разумные", то есть достижимые при "разумном" использовании билетов. При каждом положении окна запустим дейкстру по этой мапе, храня пометки в сете. Вершина — кортеж значений в окне, переход — купить билет ровно на этот период времени и каким-то "разумным" образом распределить его поездки внутри окна. Разумное использование билета — выбрать некоторое k и уменьшить первые k единиц до нулей и первые A-k двоек до единиц. После дейкстры посмотрим на все кортежи с нулевым первым элементов и для них сдвинем окно на 1 вправо, получая начальные кортежи для следующего положения окна. Достижимых вершин для каждого положения окна, кажется, O(B^3). Несмотря на длиный текст, пишется очень просто.

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

Как нормально решать Е? Миллион ифов и WA22.

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

    там уродство с даблами, у нас упало на этом тесте 3 -0.1 -0.1 0.01

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

    У вас может упасть на какой-то из перестановок этого теста: 3 1 -0.5 -2 Ответ 1. По-крайней мере у нас когда был ВА22 бага была на таком тесте.

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

    а что делать, если ваши тесты проходит, а WA 19?

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

      Можно написать генератор тестов, брутфорс и сравнить с ними.

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

А как J решать? Мы посылали quicksort, и получали WA13. Интерактор заваливал его?

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

    У нас прошел обычный Mergesort. А Quicksort заваливался. Его интерактивно несложно завалить.

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

      Блиин, всё настолько просто. Спасибо.

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

        там вроде бинпоиском можно, у нас зашло

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

          Эм, а где там можно воткнуть бинпоиск?)

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

            это надо спрашивать у Creed...

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

            ищем бинпоиском куда вставлять :) и получаем точную оценку на число операций.

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

              Эм, а с чего бы ему вообще куда-то вставляться? нет же транзитивности.

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

                не понял вопроса, но отвечу. поддерживаем отсортированную последовательность и ищем первое место, где a_i < newElement и newElemtn < a_i+1.

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

                  Вопрос: почему такое место есть? И если есть, то почему все будет хорошо с бинпоиском? Транзитивности-то нет.

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

                  Первое не найдете — транзитивности нет. А вот какое-то найдете.

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

                  Есть — потому что либо можно в начало либо в конец, либо где-то поменяется, туда и можно.

                  А бинпоиск находит какой-то корень не только на монотонной функции.

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

                  Да, действительно, согласен. Спасибо

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

                  да, согласен. я если честно не читал задачу, а только слушал решение от сокомандника. действительно просто поддерживает инвариант с тем, что a[L] < newEl и newEl < a[R]. и бинпоиск сойдется к какому-то корню

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

      Приведите, пожалуйста, пример по заваливанию рэндомизированного qsort в интерактиве

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

        Например, на каждый запрос (a < b) интерактор возвращает false если a == b, либо если уже просили сравнить (b < a) и тогда вернули true. В остальных случаях возвращать true.

        Тогда, по-видимому, классический quicksort с рандомным выбором элемента будет заваливаться: каждый раз подмассив a[l..r] будет разделяться на очень неравные части.

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

          Это не совсем корректный тест, по условию a == b быть не может, но вот возвращая все время false повалить можно. Спасибо, идея ясна.

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

            Честно говоря, я не знаю всего условия. Но я не понял, почему тест не корректный. Я имел ввиду что-то вроде:

            bool cmp(int a, int b)
            {
              if (a == b)
                return false;
              if (d[a][b]) // если уже просили сравнивать a с b
                return d[a][b] == 1;
              d[a][b] = 1;
              d[b][a] = -1;
              return true;
            }
            
            • »
              »
              »
              »
              »
              »
              »
              12 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится

              В условии прописано, что для любой пары ламп, джин точно знает, какая из них ему нравится больше. Поэтому условие if (a == b) никогда не выполнится. Да это так, придирки.

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

    У нас quicksort на линейном порядке с медианой трёх случайных элементов в качестве опорного валился примерно на 15% запусков, посылать не рискнули.

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

    Я не знаю, верно ли то, что я скажу далее. На сколько я понял(переводчик из меня фиговый), что в случае невозможности построить последовательность, то нужно вывести n + 1 0. В qs может возникнуть такая ситуация, что если построить орграф с ребром a-b, означающим, что b > a, то может появиться цикл, что как бы совсем плохо. Строго не доказывал, но проверял на существование этого цикла. Возможно я не прав.

    P.S. Писал merge, скорее всего там цикла быть не может 100%. Но qs совсем другая.

    P.P.S. Описанный выше способ с бинарным поиском — это вновь изобретенный велосипед. Называется сортировкой бинарными вставками

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

а что такое 18+, 16+... рядом с задачами? возрастные ограничения или сложность?

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

    Это отсылка к новому закону о тв-программах, где указывается возрастной лимит. Сложность задач от этого вроде не зависела.

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

      ну как сказать, во всех задачах кроме Е, в принципе, я думаю, совпало

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

Кто-нибудь в курсе, что за трешня с табличкой в итоге? Сперва продлили, потом вырубили за 5 минут до конца по service unavailable, сейчас показывает, что финальное время 5:35

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

    Кое-какие накладки со временем начала. Подробнее ответит жюри, если посчитает нужным.

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

    В одной из аудиторий МГУ произошёл сбой, из-за которого старт для этой аудитории был отложен на 35 минут (дисплеи у участников были выключены; дежурный ошибочно ожидал устной команды о начале контеста). Соответственно, только для этой аудитории турнир продлили.

    Кроме того, по техническим причинам (различные инструкции, выданные дежурным площадок) команды, пишущие в остальных аудиториях МГУ, получили условия на 7 минут позже команд в МФТИ.

    При подведении итогов жюри пересчитало результаты с помощью электронных таблиц; так как оба сдвига не повлияли на распределение призовых мест и путёвок в полуфинал, то было решено не затягивать закрытие и оставить в предварительных результатах всё "как есть".

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

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

Как решать H и G?

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

    G: подвесим дерево за какую-то вершину, обойдем dfs, если во время обхода dfs направление ребра совпадает с направлением dfs по этому ребру, запишем на ребре 1цу, иначе 0. будем хранить для каждой вершины сумму ребер до нее от корня, а так же, ее глубину.
    когда поступает запрос x, y: нужно чтобы все ребра от lca(x, y) до y были сонаправлены обходу dfs, а ребра от x до lca(x, y) противоположнонаправлены обходу dfs. это проверяется просто, если сумма х (по ребрам, которую мы храним) — сумма lca(x, y) = длине пути от x до lca(x, y), а сумма y — сумма lca(x, y) = 0, то "Yes", иначе "No"

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

А как предполагалось решать задачу D? У нас O(NlogN) получало TL20. Причем на случайном макстесте работало локально от 3 до 6 секунд.

Есть ли какое-нибудь линейное решение задачи?

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

    На разборе рассказывали за (N log N + M log N). Суф. массив плюс хитрый стек возможных максимумов при фиксированной правой границей, двигаем правую границу постепенно слева направо, плюс RMQ.

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

      У нас было такое же решение. Значит надо еще пооптимизировать.

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

    На разборе NlogN решение рассказывали.

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

    Нужна любая структура, которая умеет сравнивать суффиксы и искать lcp (даже хеши сойдут). Далее, можно решить задачу оффлайн — посортить запросы по правому концу, далее двигаем правый конец и поддерживаем 2 множества: для данного правого конца r множество суффиксов всей строки, начинающихся не правее r, которые бывают максимальными (это халява), и множество суффиксов префикса, заканчивающегося в r, которые бывают максимальными (это уже сложнее; будем добавлять туда все встречающиеся префиксы, а в процессе строить граф, если мы не добавляем в первое множество суффикс, начинающийся в r, то добавляем дугу из него в самый короткий элемент первого множества M; и удаляем r и всё, достижимое по дугам, из второго множества в момент времени r + LCP(r, M)).

    Upd: Ну и понятно, как обрабатывать запросы, имея второе множество: это просто запрос минимума на отрезке.

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

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

      А у жюри есть решение на Java (желательно без хешей)?

      А то что-то даже в дорешивание не удается пропихнуть, и запас хаков уже исчерпан.

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

        Ну я не жюри, так что не уверен, что мне следует на этот вопрос отвечать. Но если очень интересно — могу попробовать написать на Java сегодня вечером, я почти уверен, что зайдёт (особенно если без суффиксного массива решать).

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

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

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

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

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

        Для четвертьфинала суф массив проходил с запасом, видимо на contest.yandex.ru кэш у машинок поменьше, а тл выставлялся по решению с хэшами, которое летало. Я попросил увеличить тл и провести реджадж на виртуальном контесте.

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

          TL установлен в 4 секунды, все решения с вердиктом TL пересужены.

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

А кто сдал H, как? Мы придумали в две динамики за квадрат (количество путей, количество изолированных вершин) => (число способов, среднее), но свалились по #TLE из-за того, что пришлось считать в логарифмах.

Кстати, либо gcc тупит, либо сервер медленный — у меня локально на далеко не топовом ноутбуке решение из-под вижака работает 1.8 секунды, а на сервере оно не лезет в TL.

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

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

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

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

      Кстати, решение с логарифмами все-таки заталкивается под самую границу, если хорошо работать с памятью, выставить отсечение точно (2*i + j <= 4000) и не считать среднее в логарифмах.

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

    У меня было 2 динамики. Первая f(n, k) говорит, сколько есть перестановок из n элементов среди которых k выделенных могут принадлежать циклам длины 1, а остальные — нет. Вторая g(n, k) — это то же самое, только не количество перестановок, а суммарное количество циклов в них. Чтобы ничего не переполнялось, сразу считаем это количество, деленное на n!. Для этого каждый раз при переходе делим результат на n.

    Если у нас вся перестановка неизвестная, то ответ равен . В общем случае, посчитаем сколько уже есть циклов (пусть это количество равно c), а также сколько есть цепочек (k) и сколько неизвестных позиций (d). Тогда ответ равен .

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

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

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

    У нас линейное решение.

    Считаем такую велечину f[n] = 1 + 1/2 + ... + 1/n это средние число циклов в перестановке длины n. Пусть у нас цепочек a, изолированных точек b, законченых циклов c потом считаем велечину

    d = Sum[i = 0, i <= b, C(b, i) * (a + b — i)! * (f[a + b — i] + i + c)(-1) ^ i]

    e = Sum[i = 0, i <= b, C(b, i) * (a + b — i)! * (-1) ^ i]

    d — это суммарное число циклов в хороших перестановках e — число хороших перестановок

    ну и ответ собствено d / e и считали всё в логарифмах

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

Кто-нибудь знает, почему в Java рекурсия глубины 10^5, с одним int в параметре получает stackoverflow?

Java version "1.6.0_20" OpenJDK Runtime Environment (IcedTea6 1.9.10) (6b20-1.9.10-0ubuntu1~10.04.3) OpenJDK 64-Bit Server VM (build 19.0-b09, mixed mode)

Запускается с параметрами -Xmx512M -Xss64M

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

В К у кого-нибудь были проблемы с хэшами?

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

    Нет. Там и без хешей с мэпом нормально заходит. UPD Нет — в смысле с хэшами сдалось.

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

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

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

Что-то новенькое от Яндекса: сразу показывать полные результаты виртуальных участников.

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

    В смысле полные?

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

      Show external results и видишь все задачи, решенные командами в Минске и вчера в СПб

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

        Зарегистрированным на контест не показывается) Да и посмотреть их можно было и раньше на официальном сайте ЧФ.

        Но вообще этого не стоило делать, конечно.

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

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

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

            Для участников она имитируется. Полные результаты видны только тем, кто не зарегистрирован на контест.

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

Если вам понравились задачи Western subregional contest 2012, то плюсуем (ну и минусуем те, кому не понравился)!!! Так же хочу услышать ваше мнение о нашем проблемсете! Спасибо. [моя один из авторов]

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

    Мне очень понравилась легенда задачи про немонотонные последовательности :)

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

    В некоторых задачах было довольно сложно распарсить условие:(

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

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

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

The interface worked really slow for me. Did it happen to other people too?

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

Так все-таки, контест будет продлен?

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

Даже Codeforces меньше тупит!!!!!!!

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

Что надо было в F сделать?

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

    Рекурсивное решение. Разбиваем множество вершин на 2 равных. Решаем задачу для каждого множества. Затем соединяем каждую веришну из первого множества с каждой вершиной из второго, используя наименьший цвет, который не использовался в раскрассках этих множеств. Когда только 1 вершина ничего не делаем. Получается цветов O(logN).

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

      Там abacaba нужной длины надо вывести в каждой строчке. Вроде как раз это и получается.

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

      берём смотрим на двоичные разложения номеров двух вершин, находим какой-нибудь бит, который в этих разложениях отличается, красим ребро между этими двумя вершинами в соответствующий номеру бита цвет (каждому номеру бита ставим в соответствие свой уникальный цвет). Несожно видеть что а) по каждому цвету будет двудольный граф б) цветов задействовано верхняя целая часть log_2(N). Получаем AC.

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

Какие-нибудь идеи как решать L? Или хотя бы как понять условие. По словам niyaznigmatul я понял, что там есть что-то еще кроме отсутствия вершин связных с тремя попарно несвязными.

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

    Граф обладает двумя свойствами:
    1. Если рассмотреть множество вершин N(v) (соседи вершины v), то граф на этих вершинах связный
    2. В графе нет подграфов K1,3.

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

      А как можно было понять первое?

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

        "The news about the success of any contestant passes from any of his acquaintances to all his acquaintances (probably through other people). Two persons do not communicate unless they know each other and when they do, they only discuss people they both know, but not themselves."

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

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

    Я решал так:

    1) начинаем с треугольника 2) если можно куда-то вставить вершину в цикл, вставляем 3) если нет, но еще есть вершины, связанные с циклом, то нетрудно видеть, что будут вершины, соединенные с как минимум двумя вершинами цикла, скажем пусть вершина a соединена с v_i и v_j. Тогда заметим, что v_{i-1} и v_{i+1} обязательно соединены, и v_{j-1} и v_{j+1} обязательно соединены. Тогда нам достаточно одного из следующих ребер, чтобы перестроить цикл, включив в него a: v_i-v_{j-1}, v_i-v{j+1}, v_{i-1}-v_j, v{i-1}-v{j+1}, v{i+1}-v{j-1}, v_{i+1}-v_j, так же достаточно, если i+1=j-1 или i-1=j+1. Дальше я просто пытался найти такую тройку a, v_i, v_j, чтобы одно из этих условий было выполнено, и это почему-то всегда получается. Я пытался доказать, что это всегда получится, но не смог :)

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

      Ну я пытался делать что-то такое же. Но без первого условия у меня был контрпример. Надо отметить, что ни мы, ни Angry Maffin этого условия не заметили. И думаю мы такие не одни.

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

      Доказать это не получится. Пример графа:

      • 9 24
      • 1 2
      • 1 3
      • 2 3
      • 2 4
      • 3 4
      • 3 5
      • 4 5
      • 4 6
      • 5 6
      • 5 7
      • 6 7
      • 6 8
      • 7 8
      • 7 1
      • 8 1
      • 8 2
      • 1 9
      • 5 9
      • 1 5
      • 3 6
      • 3 8
      • 7 2
      • 7 4
      • 3 7

      Если в нём построить цикл 1 2 3 4 5 6 7 8 1 и попытаться описанным способом добавить вершину 9, то это не выйдет. (Именно такой цикл может быть построен последовательным добавлением вершин, смежных с парой соседних по циклу: 2 4 7 2, 2 4 6 7 2, 2 4 6 7 8 2, 2 4 5 6 7 8 2, 2 3 4 5 6 7 8 2, 1 2 3 4 5 6 7 8 1.) Но чтобы получить тест, на котором решение «упадёт», требуется перенумеровать определённым образом вершины. Аналитически это сделать сложно из-за использования HashSet'а. Возможно, такой перенумерации для этого графа и не существует, но идея может использоваться в других примерах.

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

        Все понял, повезло :) А как правильно — чуть докрутить это, или что-то совсем другое?

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

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

          Основа идеи — полная циклическая расширяемость таких графов (при очевидно необходимом условии связности) — правильная. А дальше у меня всё совсем по-другому:) Пусть у нас есть граф G, цикл C и вершина , смежная с . Построим цепь от x до ближайшего из соседей v по циклу (до u), содержащую только вершины из окружения v (такая цепь существует в виду локальной связности). Теперь возьмём на этой цепи ближайшую к u вершину . Если y смежна с u (и с v по определению цепи, которой y принадлежит), то всё очевидно. Иначе она не смежна и со вторым соседом v (поскольку u ближе), тогда соседи v смежны, значит, можно «изъять» v из цикла. Теперь, пройдём по цепи от y до u и индуктивно покажем, что либо мы уже умеем расширять цикл, либо верно следующее. (Пусть z текущая вершина цепи, а s — следующая.)

          • Соседи каждой вершины цепи от y до z смежны между собой.
          • Никакие две вершины цепи от y до z не являются соседями по циклу.

          А значит, все вершины цепи от y до z можно изъять из цикла (одновременно).

          Если z смежна с соседом t по циклу для s, то мы сможем изъять все вершины цепи от y до z, а также v, смежную с s и «встроить» всю эту конструкцию вместо ребра st. (Если s = u, вершину v не нужно изымать.) Если же z не смежна с соседями s, то соседи s смежны между собой и s также можно «изъять».

          Если сосед t вершины s смежен с v, можно изъять всю цепь от y до z, а также вершину v и встроить вместо ребра st. Значит, среди вершин цепи от y до z нету двух соседей по циклу.

          Остаётся заметить, что рано или поздно, очередная вершина цепи будет смежна с соседом следующей, поскольку каждая вершина цепи смежна с v — соседом u (конца цепи).

          Изложение громоздкое, но идея, надеюсь, прозрачная.

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

            Да, все понятно, круто! Это сильно круче моего решения — я дошел только до выбора y фактически.

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

    Извиняюсь, я криво прочитал условие.

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

      В задаче достаточно условия "дополнение не содержит треугольников"

      Но в задаче же нет такого условия

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

        Да, спасибо, меня научили правильно читать условие этой задачи.

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

I'm getting WA in test case 3 on problem I. I'm solving it as vertex cover of a tree (building the trie and considering the empty string is not allowed). I tried testing it with various tests and it 's giving the right answers. Does the idea seem to make sense? Is there some special tricky case?

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

это какая-то срань господня, а не ajax, мы просто колоссально много времени в начале контеста не могли открыть страницу с задачами, посылками и проч. — просто белый экран — класс, я так понял, если не особо быстрый инет — хрен контест напишешь

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

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

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

Расскажите как решать D и K с Минского контеста?

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

    D: 2 раза применить алгоритм описанный здесь: раз для опредиления порядка в котором будут йти лабки в каждой контрольной, и раз в каком порядку будем писать лабки.

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

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

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

      а кто-нибудь может объяснить, что здесь будет являться f(t)? ведь у нас штраф зависит от позиции, на которой будет стоять контрольная работа, не?

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

      Не могли бы вы пояснить: почему недостаточно просто отсортировать по ? (это, наверное, одно применение алгоритма Джонсона).

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

        а у нас w[i] прикрепленно к конкретному p[i], разве не к позиции (i)?

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

          Видимо так. Я только учусь читать, так что это нормально:)

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

        Потому что мы сперва должны сдать 1 предмет полностью, потом другой и т.д.

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

    K. Для маленьких (<100) напишем перебор. Для четных. Решим для (n-8)/2, умножим все на 2, добавим две 4. Для нечетных. Решим для (n-9)/2, умножим все на 2, добавим 3 и 6.

    P.S. Это решение от niyaznigmatul. Мы писали такое же но посложнее. Мы для остатков по модулю 6 делали. Для четных так же. Для кратных трем (3n-6)/6 и прибавить 3 и 3. Для остатка 5- потом добавить 2 и 3. А для остатка 1. Решить для (n-55)/6 и добавить (2,4,21,28).

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

      K. Для всех чисел напишем перебор :) Переходы будут двух видов: заменить число 1/n на k чисел 1/(nk), либо заменить число 1/n на 1/(n+1) + 1/(n * (n + 1)). Возможных переходов первого вида довольного много, поэтому будем делать лишь тот, который максимально приближает сумму к заданной.

      Это решение работало почти мгновенно для больших n, а для маленьких почему-то несколько ответов не находилось :) Пришлось вписать их руками.

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

        Я сейчас в дорешивании сдал похожее решение. У меня тоже 2 перехода: либо заменить 1/n на 2 числа 1/(2*n) и 1/(2*n), либо заменить число 1/(2*n) на 2 числа 1/(6*n) и 1/(3*n). Только для трех маленьких тестов оно не нашло решения и пришлось запустить перебор, когда n ≤ 55.

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

      А у меня без ручных случаев :) Для <100 напишем перебор. Для больших n вместо ручного кодирования 1/2+1/4+1/4 и 1/2+1/3+1/6, просто пытался брать все разложения из перебора для <100. Не сильно меньше кода, но чуть меньше думать надо :)

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

    Задача D. Вроде никто пока нормально не объяснил.

    Пусть у нас есть 2 лабы, и мы сначала сдаем первую (в момент времени t). Тогда мы получим штраф, равный w[1] * t + w[2] * (t + p[1]).
    А если мы сдаем сначала вторую, а потом первую, мы получаем штраф w[2] * t + w[1] * (t + p[2]).
    Эти два значения отличаются на величину w[2] * p[1] — w[1] * p[2]. Если она меньше нуля, выгоднее первый случай, иначе — второй. Теперь можно посортить все лабы в данном предмете с этим компаратором.

    Теперь посмотрим, чем равен штраф в группе из k лаб, если начинали мы так же в момент времени t. Он равен w[1] * t + w[2] * (t + p[1]) + ... + w[k] * (t + p[1] + ... + p[k-1]).
    Здесь имеют значение только слагаемые (w[1] + ... + w[k]) * t, т.к. оставшиеся произведения (обозначим их за X для краткости) не зависят от времени сдачи лабы.
    Соответственно, если сдавать сначала первую группу лаб, а потом вторую, то штраф будет равен (sum_w1 * t + X1) + (sum_w2 * (t + sum_p1) + X2), а если сначала вторую, а потом первую — то (sum_w2 * t + X2) + (sum_w1 * (t + sum_p2) + X1). Видно, что они отличаются на величину sum_w2 * sum_p1 — sum_w1 * sum_p2. Отсортив группы лаб по этому компаратору, получаем искомое разбиение.

    Для закрепления можно решить задачу J вот отсюда, правда, она посложнее в реализации, но идея та же.

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

      Круто объяснил, теперь понял. Мы не успели её додумать, была бы седьмая)

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

Как решать А?

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

    Рассмотрим строку T = S + S из которой удален последний символ. Тогда все циклические сдвиги — это подстроки длины n = |S| этой строки.

    Разобьем наш шаблон на части q1, q2, ..., qk из букв, которые находятся между звездочками. Тогда если мы хотим проверить подстроку [l, r] строки T на то, подходит ли она к шаблону, достаточно чтобы части qi присутствовали между l и r в качестве подпоследовательности, причем между собой не пересекались. Дополнительно накладывается следующее условие: если шаблон не начинается со звездочки, то начало q1 должно быть в позиции l. Аналогично, если шаблон не заканчивается на звездочку, то qk должно заканчиваться в позиции r.

    Чтобы это все проверить, достаточно пройти по строке T справа налево и поддерживать динамику f(pos, i) -- самое раннее возможное окончание куска qk, если мы начинаем прикладывать кусок qi к позиции pos или правее. Она довольно просто пересчитывается.

    Сложность O(|S|·|Pattern|).

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

Как решать B?

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

    Тернарным поиском по углу наклона боковой стороны

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

    я знаю человека, который сдал перебор угла наклона с точностью 10^-6

    PS. если не знать тернарный поиск, можно было еще бинпоиском по производной

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

      Я знаю одну команду, где просто нашли сами корни производной.

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

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

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

          А как, кстати, не упоротые доказывали, что в этой задаче можно делать тернарный поиск?

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

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

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

              А как предлагается тестировать решение? Штрафные попытки тратить?

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

                Да. Это гембл, безусловно, но чаще всего оправданный. Особенно когда пишешь лично, а не командой

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

                Да. В геометрии обычно либо прокатывает, либо многоугольники и в формуле какие-то min/max/etc.

                Ну либо сказать, что функция непрерывная и не особо упоротая, сделать 104 тернарников на маленьких отрезках и выбрать лучшее решение.

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

      На самом деле, тернарный поиск — штука, которую можно сделать немного похожей на бинарный поиск по производной. Во всяком, случае, те две точки(которые обычно выбираются как l + (r - l) / 3 и r - (r - l) / 3) можно выбирать сколько угодно близкими друг другу(это как минимум улучшит время работы в маленькую константу раз), а поскольку от производной для выбора следующего интервала требуется только знак, то этот знак будет совпадать с разностью значений в точках, например r - 0.49(r - l) и l + 0.49(r - l) .

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

        Это дает очень хреновую точность — собственно, если классический тернарный поиск находит с точностью eps, то этот метод будет находить с точностью 50 / 3 eps

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

          Хм, и правда. А я всю жизнь думал, что у этой идеи нет минусов.

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

Как решается задача D (Western QF) ? Идея посортить хитро строки в порядке уменьшения длины префиксов (отдельно для каждой группы строк, начинающиеся с общего символа) не прошла 22 тест :-(