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

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

Привет.

Как решать задачи A, C и H с этой тренировки? Буду очень признателен.

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

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

В задаче С будем использовать дерево отрезков. Так как всего 366 операций обновления, значит просто будем перестраивать все дерево отрезков с каждой операцией обновления.

В задаче H нужно было посчитать динамику dp[i][j] — максимальная длина строки палиндрома на подстроке s[i..j], которую можно получить путем вычеркивания минимального количества символов. Затем просто пройтись по всем парам (l, r) и найти максимальный ответ, т.к. количество символов которые стоит удалить чтобы получить палиндром на подстроке s[i..j] = j — i + 1 — dp[i][j].

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

    Так как всего 366 операций обновления, значит просто будем перестраивать все дерево отрезков с каждой операцией обновления.

    Когда-нибудь я научусь внимательно читать условия задач, но только не сегодня :) Ведь почти два часа убил...

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

A — как любят говорить в таких случаях, "несложными преобразованиями..." :) Пускай ответ без последней цифры х имеет длину L, тогда (10*x+6)*3=6*10^L+x; отсюда x*29=6*(10^L-3); далее 10^L=3 mod 29. Осталось только найти k-ое по порядку подходящее L. Заметим, что период 10^L mod 29 равен 28 — дальше только подставить все значения во все полученные выражения по порядку и посчитать ответ:)

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

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

Н — считаем стандартную динамику "сколько нужно изменений, чтобы сделать подстроку от l до r палиндромом". Считаем ее по подстрокам от коротких к длинным — для подстроки мы можем либо выбросить один из крайних символов, и перейти к строке, которая короче на 1, либо бесплатно выбросить пару крайних символов, если они одинаковые — и перейти к строке, короче на 2. Далее среди всех состояний динамики, у которых значение не больше K — выбираем лучшее.

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

В задаче С можно написать SQRT-декомпозицию.

Мой код.

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

прочитал условия. Не грешновато ли давать школьникам задачи из сериала категории 18+? :)