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

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

Добрый день, дорогие пользователи Codeforces!

2 ноября начался заочный этап X Открытой олимпиады школьников по программированию. В контест добавлен первый пакет из пяти задач, остальные задачи будут добавлены позднее. Те из вас, кто знает что такое Открытая олимпиада (она же "заочка") и её правила, могут не читать дальше и сразу переходить на сайт олимпиады :) Первый пакет задач подготовили для вас: Zlobober, romanandreev, snarknews и GlebsHP.

Те, кто раньше в данной олимпиаде не участвовал, могут так же пойти на сайт и прочитать полную информацию там, а в этом посте будут обозначены лишь основные моменты. Олимпиада состоит из двух этапов: заочного и очного. Заочный этап проходит со 2 ноября по 18 января, и традиционно состоит из 10-15 задач различной сложности, тематики и формата. Мы подбираем задачи таким образом, чтобы они были интересны как совсем новичкам, так и "зубрам" олимпиадной информатики. Лучшие n участников (n приблизительно равно 400) будут приглашены на очный этап олимпиады.

Очный этап пройдёт в Москве, ориентировочные даты проведения — 7-8 марта. Площадка проведения — учебный центр нашего генерального спонсора 1С на м. Тимирязевская. Также, благодаря нашему спонсору, участникам оплачивается проживание в гостинице на время проведения олимпиады. Очный этап состоит из двух туров, уровень участников немного превосходит уровень Всероссийской олимпиады по информатике за счёт приезда сильных школьников из ближнего зарубежья. Возможно это прозвучит слишком пафосно, но на наш вкус качество задач олимпиады в последние годы превосходит Всероссийскую олимпиаду и сравнимо с IOI. Олимпиада имеет первый уровень и даёт соответствующие льготы при поступлении.

Призеры заочного этапа олимпиады никаких льгот не имеют — поступить, не выходя из дома, всё-таки не получится.

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

Жюри олимпиады призывает всех участников действовать честно, не обсуждать друг с другом решения задач и не делиться написанным кодом. Особенно хотим отметить, что любое обсуждение задач запрещено, в частности, и в комментариях на Codeforces (в том числе, и к этому посту). Все интересующие вас вопросы по задачам вы можете и должны задавать через тестирующую систему. К сожалению, каждый год некоторые участники заочного этапа не допускаются к участию в очном этапе из-за выявления случаев списывания с их участием.

Любые оставшиеся вопросы смело задавайте в комментариях.

UPD: в контест добавлены четыре новые задачи: F, G, H и I. Для вас их подготовили: thefacetakt, Sender, haku и ipavlov.

UPD2: в контест добавлены последние три задачи: J, K и L. За подготовку задач мы благодарим: romanandreev, Vaness и mingaleg.

UPD3: на сайте олимпиады доступны предварительные результаты и архив олимпиады. Рады сообщить, что Zlobober подготовил для вас разбор задач заочного этапа.

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

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

Как сдавать решения?

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

Качество задач... Это вы про задачи, в которых заходил рандом на две строчки?

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

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

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

А будет подключаться еще несколько машин для тестирования?

Просто когда добавится еще задач + останется эта "времяпожирающая" D, ждать результатов тестирования станет совсем невозможно.

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

    Иногда наблюдается рост очереди посылок, но конкретно сейчас всё нормально. Задача D в принципе долго тестируется, одна посылка проверяется по 3-4 минуты.

    В целом, я считаю, что на заочном (и только на заочном) туре время ожидания вердикта меньше 5 минут вообще не является некомфортным, а ниже 10 минут не является раздражающим.

    Также могу предложить вам тестировать локально перед отправкой :)

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

      Почему бы не ввести в D ограничение на проверку тестов последней группы? К примеру, осуществлять проверку только при полном прохождении первых четырёх групп. Или хотя бы просто 4 группы, в этом случае всё более явно.

      Особо сильно системе это, вероятно, и не поможет, но всё чуть легче будет.

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

        На это есть причина, но она будет озвучена только в разборе.

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

clock() убивает ejudge?

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

    Работаем над этим.

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

      На ЧФ, кстати, так же было.

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

      С clock() что-то порешали? Сейчас отправляю с clock() и пишет Превышено реальное время работы >2.000. Реальное время — это же астрономическое? Причем если отправить без clock(), то часть из этих тестов будет успешно пройдена.

      Run id: 6102

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

        Методом тыка выяснил, что сейчас clock() всегда возвращает -1.

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

Как перестать посылать D и начать жить, когда впереди тебя множество посылок ОПТИМИЗИРОВАНЕЕЕ?

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

    Авторское решение укладывается в ТЛ с двукратным запасом и содержит только широко известные и используемые оптимизации. Возможно, в вашем решении просто не хватает каких-нибудь идей.

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

Почему система так долго оценивает решение участников ??

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

Сам использую das keyboard (правда, не ultimate), поэтому от истории в D я поржал — спасибо. А вот с шенгеном немного прогадали — в реальности всё немножко по-другому устроено.

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

Почините ссылки на информацию об участниках :)

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

    Какие именно ссылки вы имеете в виду?

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

      Из таблички результатов. На страницу с полной информацией об участниках. Вроде этой

      P.S.: Изначально она пересылает на другую страницу, а сюда можно попасть только ручками вбив свой id.

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

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

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

    Не так уж их там и много. На момент написания комментария, всего 33 из 540 участников — вне конкурса.

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

Не обращайте внимания на этот комментарий, сейчас всё работает как надо :)

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

Вот интересно, почему большинство сдает задачу D примерно с 50 попитки?

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

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

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

http://www.olympiads.ru/zaoch/ — ссылка недоступна(

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

Я зарегистрировался, но нигде не вижу кнопочку "Сдать задачу" или тому подобное.... Кто может объяснить подробно как все таки сдавать задачи?

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

    Ну, там две ссылки — одна на персональную страницу, другая на ejudge. подозреваю, что вы находитесь на своей персональной странице. Зайдите на http://www.olympiads.ru/zaoch/, там "регистрация на олимпиаду". Вводите свой логин и пароль и заходите в ejudge. Там жмете инфо, выбираете задачу (A, B, C, D, или E) выбираете компилятор, файл и тыкаете "отправить". Все

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

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

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

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

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

    Это не имеет значения, для участия в очном туре будут приглашены все набравшие >= x баллов.

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

Можно ли быть уверенным, что на Java рекурсия в 3,000,000 возможных вызовов (не скажу в какой задаче) не кинет Stack Overflow, а работа с двумерным массивом такого же размера не кинет за пределы Time Limit?
Другими словами, есть ли авторские решения задач как на Java, как и на С++? Иначе придется пересылать кое-что :)

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

    Согласно правилам олимпиады, жюри не гарантирует возможность решить все задачи с использованием языков отличных от C и C++. Тем не менее вы говорите про задачу, для которой решение на Java у жюри есть. Вопрос про размер стека я сейчас уточню.

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

А будут дисквалифицировать за использование кода с открытых источников, как e-maxx.ru?

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

Будут ли авторские разборы задач? Я не нашел разборов задач прошлых лет...

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

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

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

Будут ли еще задачи? Если да, то когда?

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

    Будут, в самое ближайшее время.

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

      есть вопрос по интерактивной задаче: вердикт на один из тестов Превышено максимальное время работы. Это может означать что я просто превысил количество запросов? или именно задача не прошла по времени?

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

Почему посылка по задаче D проверяется >10 мин или это нормально

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

UPD. В контест добавлены задачи J, K, L.

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

Получил такую картинку:  Как я вижу себя:

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

Почему у многих участников по последней задаче 100 баллов, хотя задача — полностью оффлайн?

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

А есть способ скачать ранее отправленное решение?

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

    Нету, тоже искал) Жаль что нету этой функции

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

    Нельзя. Вероятно, во избежание возможного взлома аккаунта и кражи решений. Теперь злоумышленник может разве что отослать по всем задачам код "int main() { return 0; }" за полчаса до дедлайна :)))

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

      В FAQ примерно это и написано.

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

      Ouch. И еще берется last-submit. У меня по D было 81, написал новое решение — 30. Старый код потерян, как и мой 51 балл. :D

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

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

        Чего и советую сделать остальным ^^

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

Почему в задаче L тесты проходят вердикт (OK) а баллы 0 ? Заранее спасибо за ваш ответ.

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

    Читайте систему оценки в условии задачи

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

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

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

    Достаточно вывести ответ и вернуть ноль.

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

    В условии сказано, что надо писать определённую команду после каждого вывода. Например на паскале flush(output).

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

По 18 включительно? Или до 18? (Т.е закрывается в 00:00 18 или в 00:00 19)?

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

Заочный этап закончился... Когда будут показаны результаты оффлайн-тестов?

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

Теперь уже можно обсуждать задачи?

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

Как нормально решить D? И почему ответ не максимальное пересечение элементов 2-х разных языков?

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

    Разве нет? У меня на 100 зашло максимальное пересечение элементов 2-х разных языков. Не знаю как нормальное решение. Но... Кол-во различных элементов встречающихся менее const раз тривиально пересчитываем и удаляем. Оставшиеся пихаем в битсет. И пробегаемся! (Битсет свой писал. Встроенным не умею пользоваться.)

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

      Ну я и сразу понял,что ответ всегда <=m, ибо столько символов в каждом языке... И собственно я написал решение за O(n*n*m+nmlog(m)) который должен был получить 50... но не прошел(получил только 35 баллов) Вот код (http://pastebin.com/bPqCXPvG)

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

        при n = 1 ответ 0

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

          Да, нежданчик тест был

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

            Очень даже нежданчик... Теперь во всех задачах отдельно буду обрабатывать if(n==1)...

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

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

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

          самый тривиальный случай и ...WTF!!!

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

      Асимптотика ?

      Не понял, что имеется в виду под "пробегаемся"

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

        Пуcть const1 = 200(можно чуть больше). Ну вначале сжимаем все значения. И смотрим, если определённое значение встречается менее const1 раз, то за const1^2 увеличиваем все пары одинаковых элементов в отдельный двумерный массив и удаляем его(кроме группы, где n = 10000). Так мы сделаем не более n*m / const1 * const1^2 действий. Т.е n * m * const1. Оставшиеся значения оставим и сожмём. Пусть размер битов у нас = 20 (т.к нам надо подсчитать заранее за 2^20 кол-во бит в числе). Пусть const2 = кол-во различных элементов, встречающихся более const1 раз. Таких будет не более n * m / const1. Сократим их битсетом. Теперь их n * m / const1 / 20 в худшем случае. Отметим двумерный массив для i-го массива битсет из const2 / 20 блоков. Идём по этим блоком, делая побитовое и и проверяя по массиву преподсчёта, кол-во одинаковых элементов. + Добавим тот массив, который мы преподсчитали заранее. (Т.е все элементы встречающиеся менее const1 раз). И так для каждой пары. Среди всех таких вариантов выбрать максимум. И того асимптотика O(const1 * n * m + n^2 * const2 / 20). Ну для случая, где n <= 10000 можно не сжимать координаты и определить заранее кол-во блоков. Это ускорит процесс. (Т.к. там c =200).

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

Как решать B,F на полный бал?...

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

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

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

        Ну да.. Ну не совсем связанный. А находятся ли столицы в одной компоненте связанности.

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

    B — имитацией сортировки подсчётом + проход. http://pastebin.com/hsjj7p7L (Мой код.)

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

      Т.е мы увеличиваем значения границ подсчётом. А потом пройдёмся один раз.

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

        не можете объяснить поподробнее...

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

          Вначале подсчётом увеличиваем левую и правую границу нашего путешествия в каком-нибудь массиве(имитация сортировки подсчёта). У меня это массив ar. Также храним сумму на префиксе для пересчёта дней, что мы прошли. Т.е последних b дней. Т.е смотрим, если кол-во поездок > с хотя бы в какой-то момент времени, то ответ нет. Вообще массив ar хранит то значение на которое нужно изменить это кол-во на данный момент. А переменная s хранит точное значение. Она меняется в процессе , благодаря массиву ar. Следовательно если есть хоть один день , то увеличиваем значение. И каждый раз проверяем, сколько у нас дней в зоне за последние b дней. Если что-то непонятно написал, спрашивай!

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

Как решать I,K?

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

    Если не обращать внимания на ограничения по памяти, то K баян на дп по подотрезкам с квадратом памяти заходящий на 50. Если мы будем идти не ленивой динамикой, а сохраним последние три диагонали, то кол-во способов найти просто. Чтобы сократить откаты заметим, что если крайние символы равны, то нам всегда выгодно их удалять. Осталось два случая. Удалить первый символ или последний. (т.е дописать в конец или в начало). Теперь массив откатов нам можно хранить в виде 0 и 1. Можно сделать это битсетом. Тогда получится массив 5000*127. И это зайдёт на 70. И что осталось? Мы знаем как найти ответ(кол-во символов, что нужно добавить). И как сделать откаты. Но на них не хватает памяти. Однако можно сделать последнии 5000 откатов. Т.е первый раз пересчитываем за n^2. И запоминаем последниии 5000 значений на которые надо откатиться. И того у нас длина n — 5000. Ещё раз повторяем тоже самое за квадрат(n — 5000)^2, сохранив 5000 откатов. Нам осталось n — 10000. И находим последнии 10000 значений за (n — 10000)^2.

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

      продолжая эту идею с делением нахождения ответа пополам (рекурсивно), можно добиться O(n) памяти, сохраняя тот же O(n2) времени

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

      А я задачу к НОП свел. (Если мы зафиксировали центр палиндрома, то нужно за минимальное количество операций вставки в произвольное место строки сделать части до центра и после центра равными. Для строк s и t количество операций |s| + |t| - 2 * |lcs(s, t)|). А дальше уже искал в вики алгоритм: https://en.wikipedia.org/wiki/Hirschberg%27s_algorithm

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

        Тоже свёл задачу к НОП.Но смог написать только на 50 :(

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

        Объясните суть алгоритма, а то с английским туго.Спасибо!

        P.S.Тоже пришёл к решению с lcs, но не знал как из ML выйти(

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

          Нашел статью на русском: http://habrahabr.ru/post/117063/

          И ещё статью на английском, из которой позаимствовал код: http://wordaligned.org/articles/longest-common-subsequence#tochirschbergs-linear-space-algorithm

          Вкратце: пусть мы ищем НОП для строк s и t. Разобьём s на две примерно равные по длине части s1 и s2. Тогда НОП(s, t) = НОП(s1, t1) + НОП(s2, t2). Найти оптимальное разбиение строки t на t1 и t2 мы можем, посчитав последний слой динамики для s1, t и reversed(s2), reversed(t). После этого ищем ответ рекурсивно для пар строк s1, t1 и s2, t2.

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

    I — http://e-maxx.ru/algo/suffix_automata . Пихаем конкатенацию всех строк, разделённых одним символом-разделителем в один суффиксный автомат. И по очереди строим для каждой строки второй. Для каждого состояния найдя кол-во различных подстрок. Теперь если кол-во различных подстрок для одного автомата равно другому, то такой подстроки больше нигде нет, кроме как в этой строке. Найдём такой массив. Для i-той позициии будем хранить ближайший индекс справа, такое что подстрока [i;ar[i]] встречается как подстрока только для данной. Чтобы его найти, пройдёмся двумя указателями по строке. Правую границу двигаем, меняя состояния суф. автомата, пока такая подстрока встречается, как подстрока другой. Затем левую двигаем, пока такая подстрока больше нигде не встречается. И обновляем значения для нашего массива позиций. Теперь зная этот массив, за один пробег по нему находим минимальную длину. Теперь среди всех подстрок минимальной длины нужно найти лексикографически минимальную. Для этого просто будем хранить хеши. Находя ближайший символ для двух строк, не равный друг другу. И обновляя ответ нужных позиций. А..и у меня c++ строки не заходили(TL). Пришлось на c — строки переписывать.

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

      если перевернуть все строки, то хеши не понадобятся, вершина, которая раньше встречается в обходе дфсом графа суфф. ссылок, та и меньше лексикографически (спс adamant)

      да и изначально достаточно одного общего автомата.

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

    Задачу I можно довольно несложно решить суфмасом. Добавим в конец каждой строки свой особый символ и произведем конкатенацию всех строк из набора. Получим большую строку. Построим по этой большой строке суфмас, найдем для него массив LCP (longest common prefix) например, алгоритмом Касаи. Теперь о самой идее решения. Пройдемся по нашему суффиксному массиву указателем i, в то же время поддерживая указатели l и r. Пусть i-й суффикс принадлежит k-й строке из входных данных. Тогда пусть l указывает на последний перед i суффикс, не принадлежащей k-й строке, а r — на первый после i суффикс, не принадлежащий k-й строке. Тогда так как мы уже построили массив LCP, нам не составит труда улучшить ответ. А именно, зная максимум из LCP(l, i) и LCP(i, r), мы попытаемся жадно улучшить ответ для k-й строки (если, конечно, можем). Будут вопросы — обращайтесь :)

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

Как решать задачу D и K на 100 баллов ?

Заранее спасибо.

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

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

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

    Окончательные результаты появятся ближе к концу января, после завершения проверки на списывание. Предварительные результаты будут доступны достаточно скоро.

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

    А в последний день января данный вопрос еще более актуальный

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

Планируется ли добавить задачи на CF или открыть дорешку?

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

Тадам-тадам...! ПОЯВИЛИСЬ РЕЗУЛЬТАТЫ!!!

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

На сайте олимпиады написанно что очный этап будет проходить 6-8 марта, то есть 6 надо уже обязательно быть там или это день заезда?

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

А как быстро орг.комитет отвечает если написал на e-mail inf-open@mosolymp.ru. Нужно анкету подправить(ту, что до 23 февраля обязательна к заполнению).