Главная > Аппликатура | ||||||||||||||
2000 |
Одна из проблем при игре на фортепьяно - выбор хорошей аппликатуры, то есть определение для каждого звука мелодии (клавиши инструмента) пальца руки, которым эту ноту лучше всего сыграть в данном месте мелодии. Пронумеруем пальцы пианиста слева направо натуральными числами от 1 до P, клавиши инструмента также пронумеруем слева направо натуральными числами от 1 до K. Тогда запись звуков мелодии можно представить в виде последовательности N номеров клавиш, которые следует нажимать для ее исполнения, где N - длина мелодии. Пусть для каждой пары пальцев с номерами i и j заданы целые числа aij и bij, такие, что если палец i нажимает клавишу X, то следующей клавишей пальцем j может быть нажата лишь клавиша из диапазона [X+aij, X+bij]. Этот набор чисел aij, bij, 1 ≤ i ≤ P , 1 ≤ j ≤ P, зависит от особенностей пианиста и его исполнительской техники. Заметим, что не каждая мелодия может быть сыграна конкретным пианистом при указанных выше ограничениях. Назовем перекладыванием пальцев ситуацию, когда для двух последовательно исполняемых нот мелодии клавиша с большим номером нажимается пальцем с меньшим номером. Требуется написать программу, которая для заданной мелодии определяет аппликатуру с наименьшим количеством перекладываний пальцев. Входные данные В первой строке входного файла содержится число P - количество пальцев у пианиста (1 ≤ P ≤ 20). Во второй строке записано число K - количество клавиш у инструмента (1 ≤ K ≤ 10000). В третьей строке указаны целые числа a11 b11 a12 b12 ... a1P b1P a21 b21 a22 b22 ... a2P b2P ... aP1 bP1 aP2 bP2 ... aPP bPP, разделенные пробелами (-K ≤ aij ≤ bij ≤ K). В четвертой строке находится число N - длина мелодии (1 ≤ N ≤ 1000). Пятая строка содержит N чисел X1 X2 ... XN - последовательность разделенных пробелами номеров клавиш для исполнения мелодии. Выходные данные В первой строке выходного файла должно содержаться либо число L - количество перекладываний пальцев в оптимальной аппликатуре, либо число -1 при невозможности сыграть мелодию. Вторая строка при наличии решения должна содержать N чисел Y1 ... YN - последовательность разделенных пробелами номеров пальцев при исполнении мелодии. Пример
|