z1p0's blog

By z1p0, 12 years ago, In Russian

В общем вот сама задача :

http://codeforces.com/contest/149/problem/E

А вот разбор к ней ...

Её то саму я решил , но наверняка мое решение будет выдавать TL...Да...и хочется все таки через способ выше указанный, вернее ниже :) Будем решать задачу отдельно для каждой из m строк. Итак, пусть у нас есть строка p, ее длина l, и нам нужно проверить, может ли марсианин ее увидеть.

Введем дополнительные массивы: пусть pref[i] – минимальная позиция в s начала вхождения префикса строки p длиной ровноi, а также пусть suff[j] – максимальная позиция в s конца вхождения суффикса строки p длиной ровно j.

Нетрудно понять, что марсианин сможет увидеть p, если существует такое i, что suff[l - i] ≥ pref[i] + l–1.

Как подсчитать массивы? Для массива pref достаточно найти Z-функцию строки p#s, а для массива suff – Z-функцию строки r(p)#r(s), где r(t) означает перевернутую строку t. Используя массив Z-функций значения массивов suff и pref подсчитать тривиально.

Собственно что такое з функция и т.п я знаю )

Единственное о чем я бы хотел вас , попросить ... Это пояснить как ...вернее что будет происходить на разных этапах алгоритма....Ну если на вводе будет первый пример из тестов:))Я уж извиняюсь , просто программированием как таковым занимаюсь с апреля ... ну и сразу на спортивное перешел )Заранее спс )

  • Vote: I like it
  • +2
  • Vote: I do not like it