print1026. Текстовый редактор

printТекстовый редактор

Ограничения: время – 2s/4s, память – 32MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0)

16:00
Закончил изменять цвет текста во всех документах на белый. В справочной системе изменил размер шрифта на "2".

16:30
Юзеры звонят, жалуются, что не видят ничего в документах. Посоветовал зайти в меню "Правка", выбрать пункт "Выделить все", нажать клавишу "Del", затем F5. Пообещал прислать приложение к инструкции, где описан такой способ.

16:45
Еще один звонок. Жалуются, что не могут ничего прочитать в файлах справки. Сказал, что все исправлю. Повесил трубку. Изменил шрифт на Wingdings.
Системный администратор всегда минимизирует свои усилия. Сейчас его интересует вопрос, какое максимальное число нажатий клавиш ему потребуется, чтобы перевести курсор в любую другую позицию внутри некоторого текста.
Текст, с которым работает редактор, представляет собой набор строк. Строки состоят из печатных символов (с ASCII-кодами больше 32) и пробелов. Строка никогда не начинается пробелом и не заканчивается им. Слово – это часть строки, не содержащая пробелов и ограниченная слева и справа пробелами или концами строки. Пользователь может перемещать курсор с помощью восьми операций:
  • Влево. Курсор перемещается на один символ влево. Если курсор стоит в начале строки, то он не сдвигается.
  • Вправо. Курсор перемещается на один символ вправо. Если курсор стоит в конце строки, то он не сдвигается.
  • Вверх. Курсор перемещается на одну строку вверх. Если текущая строка первая, то курсор не сдвигается. Если после перемещения курсор выходит за пределы строки, то он устанавливается на ее последний символ.
  • Вниз. Курсор перемещается на одну строку вниз. Если текущая строка последняя, то курсор не сдвигается. Если после перемещения курсор выходит за пределы строки, то он устанавливается на ее последний символ.
  • В начало строки. Перемещение на первый символ текущей строки.
  • В конец строки. Перемещение на последний символ текущей строки.
  • На одно слово влево. Если курсор находится внутри слова, то он перемещается на его первый символ. Если же курсор находится на символе пробела или на первом символе слова, то он перемещается на начало предыдущего слова. Если текущее слово – первое, то курсор окажется на первом символе строки.
  • На одно слово вправо. Курсор перемещается на начало следующего слова. Если текущее слово последнее в строке, то курсор перемещается на последний символ строки.
Любая операция, кроме двух последних, требует одного нажатия на клавишу. Перемещение на слово влево и на слово вправо требует двух нажатий (Ctrl+left, Ctrl+right).
Ввод
Первая строка входного файла содержит целые числа `R,\ C` – номер текущей строки и номер символа в текущей строке соответственно. Все остальные строки содержат текст, загруженный в редактор.
Вывод
Выходной файл должен содержать единственное число: наименьшее значение `N`, такое, что количество нажатий клавиш, необходимое для перевода из текущей позиции в любую другую позицию текста не превосходит `N`.
Ограничения
Размер текста во входном файле не превосходит 2000 байт. Входной файл не содержит пустых строк.

Пример ввода 1

3 10
ababaca baca
abcde
ab abc abcde

Пример вывода 1

5

Пример ввода 2

1 1
begin write(a+b); end.

Пример вывода 2

8
Источник: И. Туфанов, ДВГУ
loading