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

Автор Gerald, 13 лет назад, По-русски
Разбираясь с тандемными повторами при решении задачи, которую обсуждали тут, я перечитал несколько трудов Гасфилда и Крочемора (не уверен что это так пишется по русски =) ) по тандемным повторам. В основном все алгоритмы, описанные там, находят все вхождения тандемных повторов в строку (примитивных, вообще всех, различных, вариаций много). И лишь только в одной статье Гасфилда отдаленно упоминается, что существует алгоритм, который отвечает для позиции i в строке, существует ли какой-нибудь (возможно минимальный) тандемный повтор начинающийся в позиции   i - L + 1 длины L. Кто-нибудь что-нибудь слышал о подобном алгоритме, статье где его можно прочитать? Или может быть кто-нибудь знает как свести одну из вышеперечисленных решенных задач к этой за приемлемое время? 
 
P.S. Гугл скромно молчит в ответ на все вопросы :(

Полный текст и комментарии »

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

Автор Gerald, 13 лет назад, По-русски
На одной из тренировок школьников на NEERC в этом году, была одна интересная строковая задача. Вот её приблизительное условие:
Строка называется хорошей, если какой либо её префикс ненулевой длины и отличный от всей строки совпадает с её суффиксом. Дана строка длиной до 105 символов, нужно для каждого её циклического сдвига определить является он хорошим или нет.

Условие в оригинале и авторское решение по задаче можно найти где-то-тут. Оригинальное название задачи "Заклинание Границы".

В авторском решении, что-то весьма хитрое с z-функцией и разделяй-и-властвуй, кажется, я не очень понял. Предлагаю пообсуждать решение здесь :). 


P.S. Некто e-maxx, говорил, что, вроде бы, подобная задача была когда то в Петрозаводске на Станкевич контесте. И что у нее есть решение как z-функцией, так и суффиксным деревом. 

Полный текст и комментарии »

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

Автор Gerald, 13 лет назад, По-русски
Помнится мне на разборе задач полуфинала Petr объяснял все задачи пользуясь презентацией или чем то подобным, кто нибудь знает где можно эту презентацию достать? 

Полный текст и комментарии »

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

Автор Gerald, 13 лет назад, По-русски
Собственно задача состоит в следующем, есть строка зашифрованная по RLE, т.е. представленная в виде (x1)k1(x2)k2...(xn)kn, где (xi)ki означает строку из символов ki длины xi (например строку AAABBCCC можно представить в виде (3)A(2)B(3)C). Нужно отвечать на запросы Qi, вывести Prefix(Qi). (Prefix(i) - префикс функция i-го префикса строки). 

Ограничения: ki до 109, Количество блоков в RLE до 50000, запросов 105.

Предлагаю совместными усилиями "одержать" эту задачу. =)

Полный текст и комментарии »

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

Автор Gerald, 13 лет назад, По-русски
    Наверное затронутая тема стара как наш с вами мир, но на кодифорсес (до сегодняшнего дня ничего подобного я не видел. 

    Итак...(барабанная дробь) всё началось с того, что я пересел на Ubuntu. И теперь вдохновленный идеями опенсорса качаю подряд весь софт, какой только непопадя, чтобы хоть как нибудь удовлетворить свои ненасытные потребности кодинга, серфинга и прочего прочего... 
    Как и полагается, очень долго и тщательно я выбирал редактор кода. И вот перепробовав целую кучу подобных редакторов, я остановил свой выбор...(и тут снова барабанная дробь) на Emacs... Не могу сказать, что emacs мне сразу понравился, честно говоря, удалял и устанавливал вновь его я где-то раза 2-3...=) В общем, я уже почитал достаточно манов, но хотелось бы услышать мнение сообщества... какие расширения, key биндинги, и прочие прелести настройки редактора используете вы? Хотелось бы услышать мнения метстных Гуру emacs о том как его надо настраивать и какие горячие сочетания клавиш использовать? В общем всё что может быть полезно начинающему emacsЕРУ пишите здесь... думаю это многим будет полезно... =)

Полный текст и комментарии »

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

Автор Gerald, 13 лет назад, По-русски
Как то раз, на одном TCM контестов (или что-то в этом роде), встречалась следующая задача: Дано логическое выражение с переменными, нужно его так преобразовать, чтобы получить минимальное по длине эквивалентное ему выражение. Хотелось бы узнать как решать подобную задачу? Может кто-нибудь знает статьи или классические алгоритмы решения такой задачи?

Полный текст и комментарии »

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

Автор Gerald, 14 лет назад, По-русски
На одной из прошлых тренировок ИТМО я наткнулся на одну интересную задачу. В ней давалась строка и делались следующие запросы, перевернуть отрезок с L по R, найти LCP двух суффиксов i, j, длина строки 106, да и запросов тоже 105. На контесте тогда я не успел добраться до нее, заступорился на более простых задачах, а в дорешивании не смог придумать как решать. Подозрительное слово переворот так и напрашивает декартово дерево из хешей, но как его поддерживать не очень понятно =)


В общем, Хотелось бы узнать как решается эта замечательная задача =). Жду комментариев!=)

Полный текст и комментарии »

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

Автор Gerald, 14 лет назад, По-русски
Задача предложена Раховым Артемом (RAD.). 
Решение:
Посмотрим на ГМТ точек куда может приземлиться ДравДэ, есть несколько случаев: 
  1. ГМТ - угол, в том случае, если проекции их на плоскость Oxy есть вектора линейно независимые. Получить этот угол достаточно просто. Вершина его будет очевидно в точке старта ДравДэ, один из образующих лучей будет сонаправлен с проекцией вектора скорости самолета, другой просто вычисляется 
    Az  + Vz * tv + Uz *  tu = 0
    Ax  + Vx * tv + Ux*  tu = Bx
    Ay  + Vy * tv + Uy *  tu = By
    где A стартовая точка, а B та точка куда ДравДэ приземлится. Подставив в качестве tv 
    например 1 можно легко вычислить t2 из первого уравнения и далее найти точку B. Это и будет точка на втором луче.
  2. ГМТ - луч или прямая, в том случае если проекции векторов скоростей линейно зависимы, луч когда ветер дует не слишком сильно =). 
Понятно, что ответ существует только в том случае, если есть пересечения многоугольника и ГМТ приземления. Так же легко понять, что минимальные времена полета получаются в критических точках, то есть в точках пересечения многоугольника и сторон угла (и с лучом), а также в  вершинах многоугольника. Найдем времена t1, t2 во всех таких точках и выберем минимальные (в смысле минимальности описанной в условии). Искать эти времена можно их естественных соображений, тогда будут возникать случаи ---> ифы ---> БАГИ. Намного удобнее выписать все соотношения в виде линейных уравнений и решить их. (там тоже возникают неприятные случаи, но в этом случае их намного меньше).

Полный текст и комментарии »

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