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

Автор Darisishe, 4 года назад, По-русски

Какая идея решения этой задачи ( https://old.informatics.msk.ru/mod/statements/view3.php?chapterid=112916# )? Пытался что-то придумать с хранением отсортированных циклических сдвигов (в итоге можно сравнивать только первые сдвиги для префикса и суффикса) и каждый раз, добавляя новый элемент к префиксу и суффиксу, пересортировывать эти сдвиги, но не знаю, возможно ли это сделать оптимально по времени.

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

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

Пусть наша строка имеет префикс и суффикс, являющиеся циклическим сдвигом. Пусть префикс — это строка $$$\alpha\beta$$$, а суффикс — это строка $$$\beta\alpha$$$ ($$$\alpha$$$ и $$$\beta$$$ — это какие-то строки, такое представление существует по определению циклического сдвига). Далее длина $$$\alpha$$$ равна $$$n$$$, длина $$$\beta$$$ — $$$m$$$ Тогда наша строка имеет вид t = [ α ][ β ] . . . [ β ][ α ]. Сделаем следующую замену исходной строки: создадим новую строку $$$s$$$, в которой на чётных индексах разместим символы первой половины строки $$$t$$$, а на нечётных — развёрнутой половины. Так, например, строка $$$\mathbf{ababbab}babbaab$$$ превартится в строку $$$\mathbf{a}b\mathbf{b}a\mathbf{a}a\mathbf{b}b\mathbf{b}b\mathbf{a}a\mathbf{b}b$$$. Посмотрим теперь, как будет выглядеть начало полученной строки в терминах строк $$$\alpha$$$ и $$$\beta$$$: $$$s = \mathbf{\alpha_0}\alpha_{n-1}\mathbf{\alpha_1}\alpha_{n-2}\dots\alpha_{n-1}\alpha_0 \mathbf{\beta_0}\beta_{m-1}\dots\mathbf{\beta_{m-1}}\beta_0\dots$$$. Нетрудно видеть, что строка $$$s$$$ начинается с двух палиндромов чётной длины.

Как решать получившуюся задачу
  • »
    »
    4 года назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Вау, а все не так сложно оказалось. Благодарю за помощь!