IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Перетряхивание массивов, оптимизация, Помогите решить задачу
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 24
Пол: Мужской

Репутация: -  0  +


ФАЙЛОВЫЙ МЕНЕДЖЕР
Имя входного файла: far.in
Имя выходного файла: far.out
Петя работает над очень большим проектом. Проект содержит N файлов. В процессе работы Пете часто приходится просматривать и редактировать файлы. Для ускорения работы Петя использует файловый менеджер FAR Menager, который отбражает список имен файлов проекта в некотором порядке.
В текущей версии FAR Manager'а для перемещения по списку имен файлов есть следующие возможности:
1) Можно нажать клавишу "вниз", при этом курсор перемещается на следующий файл в списке. Для последнего файла в списке следующим считается первый.
2) Можно нажать клавишу "вверх", при этом курсор перемещается на предыдущий файл в списке, для первого файла предыдущим считается последний.
3) Можно нажать клавишу "Alt" и, удерживая ее, набрать последовательность латинских букв. После этого клавишу "Alt" следует отпустить, и в этот момент курсор переместится на ближайший файл, имя которого начинается с заданной последовательности символов. Ближайший файл - это файл, на который можно переместиться за наименьшее количество нажатий клавиши "вниз". Если заданная последовательность является началом имени текущего файла, или файла, имя которого начинается с этой последовательности, не существует, то курсор остается на месте.
Первая и вторая из описанных возможностей файлового менеджера требуют по одному нажатию на клавиши, а третья - одного клавиши "Alt" плюс нажатий, равное длине набранной последовательности латинских букв.
Файлы пронумерованы от 1 до N в порядке их следования. После загрузки FAR Manager'а курсор находится на первом файле.
Петя знает, что ему придется редактировать файл с номером a[1], затем с номером a[2] и так далее, а последним - файл с номером a[k]. В последовательности a[1], a[2], ..., a[k] один и тот же номер может встечаться несколько раз. При каждом перемещении от одного файла к другому Петя хочет нажимать как можно меньше клавиш.
Требуется написать программу, которая выдает искомую последовательность нажатий клавиш.

ФОРМАТ ВХОДНЫХ ДАННЫХ
В первой строке входного файла записано целое число N (1 <= N <= 1000) - количество файлов в проекте.
В следующих N строках записаны имена файлов, по одному в каждой строке. Файлы перечеслены в том порядке, в котором они отображаются файловым менеджером. Имена состоят только из строчных латинских букв. Длина каждого имени не превосходит 2000 символов. Все имена файлов различны.
Далее в следующей строке записано целое число k (1 <= k <= 10).
Последняя строка входного файла содержит k целых чисел a[1], a[2], ..., a[k] (1 <= a <= N) - номера редактируемых файлов. Редактирование файлов выполняется в том порядке, в котором они встречаются в последовательности a[1], a[2], ..., a[k].

ФОРМАТ ВЫХОДНЫХ ДАННЫХ
Выходной файл должен содержать описание искомой последовательности нажатий клавиш в виде k блоков информации:
* Первый блок информации описывает перемещение от файла с номером a[1] к файлу с номером a[2].
* Второй блок информации описывает перемещение от файла с номером a[2] к файлу с номером a[2].
* ...
* k-ый блок информации описывает перемещение от файла с номером a[k-1] к файлу с номером a[k].
Каждый блок информации выглядит следующим образом.
В первой строке блока записывается число L - наименьшее количество нажатий клвиш, необходимое для перемещения от очередного файла последовательности к следующему.
Следующие L строк блока описывают нажаимаемые клавиши. Каждая из строк содержит описание одной клавиши:
* Если нажимается клавиша "вниз", то в строке записывается слово down
* Если нажимается клавиша "вверх", то в строке записывается слово up
* Если нажимается клавиша "Alt", то в строке записывается слово Alt
* При нажатии клавиши с латинской буквой выводится соответсвующая ей латинская буква
Если существует несколько оптимальных вариантов перемещения, то требуется вывести любой из них.

ПРИМЕРЫ
========== ==========
far.in far.out
========== ==========
6 1
submit up
monitor 3
monitorx Alt
monyator m
subversion down
sub 0
5 2
6 3 3 5 2 down
down
2
Alt
m
========== ==========
8 3
abc Alt
abv a
abba u
test 2
auvto down
ioi down
olympiad
2
4 6
========== ==========
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 19.12.2017 5:24
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"