시간 제한
메모리 제한
시간 제한
2초
메모리 제한
128 MB
타브 악보는 프렛이 있는 현악기를 위한 악보 표기법이다. 각 줄은 악기의 한 줄을 나타내며, 줄에 적힌 문자는 그 줄을 연주할 때 눌러야 하는 프렛 번호를 뜻한다. -는 그 시간에 그 줄을 연주하지 않는다는 뜻이다.
-------------3-----------------0-------2---------------0----------------가장 위에 적힌 줄이 1번 줄이고, 그 아래가 2번 줄이며, 이후도 같은 방식으로 번호가 붙는다. 악보는 왼쪽에서 오른쪽으로 읽고, 왼쪽에서 i번째 열은 시간 i에 연주하는 음들을 나타낸다. 위 악보에서 0번 열에는 숫자가 없으므로 아무 음도 연주하지 않는다. 시간 1에는 2번 줄의 3번 프렛을 잡고 연주한다. 시간 3에는 4번 줄의 2번 프렛을 잡고 연주한다. 시간 7에는 3번 줄과 5번 줄의 0번 프렛, 즉 열린 줄 두 개를 동시에 연주한다.
각 열린 줄은 고유한 음정을 가진다. 어떤 줄의 열린 줄 음정이 P라면, 그 줄의 F번 프렛을 누르고 연주했을 때의 음정은 P + F이다. 사용할 수 있는 프렛 번호는 0부터 35까지이며, 악보에는 0-9와 A-Z가 쓰인다. A-Z는 각각 10-35를 뜻한다.
악기 A로 연주하기 위한 타브 악보와, 악기 A와 악기 B의 열린 줄 음정이 주어진다. 이 악보를 악기 B로 연주할 수 있는 타브 악보로 바꾸어야 한다. 새 악보에서는 모든 음을 D 반음만큼 조옮김한다. D가 양수이면 음을 올리고, 음수이면 음을 내린다.
하나의 음을 악기 B의 여러 줄에서 연주할 수 있다면, 열린 줄 음정이 가장 높은 줄을 선택한다. 그런 줄이 여러 개라면, 악보에서 더 아래에 적힌 줄을 선택한다.
한 열에 여러 음이 있으면 코드로 동시에 연주한다. 코드는 목표 음정이 높은 음부터 차례대로 악보에 배치한다. 각 줄은 한 열에서 하나의 음만 낼 수 있으므로, 이미 사용한 줄은 다음 음을 배치할 때 고려하지 않는다. 각 음을 배치할 때는 위의 한 음 규칙을 그대로 적용한다. 코드의 어떤 음이라도 배치할 수 없으면, 그 열의 모든 줄에 x를 출력한다.
첫째 줄에 악기 A의 줄 수 N과 악보의 열 수 M이 주어진다. N과 M은 50 이하의 자연수이다.
다음 N개의 줄에는 길이가 M인 타브 악보가 위쪽 줄부터 차례대로 주어진다. 그 다음 줄에는 악기 A의 1번 줄부터 N번 줄까지의 열린 줄 음정이 정수로 주어진다. 각 음정의 절댓값은 50 이하이다.
그 다음 줄에는 악기 B의 줄 수 K가 주어진다. 그 다음 줄에는 악기 B의 1번 줄부터 K번 줄까지의 열린 줄 음정이 정수로 주어진다. 마지막 줄에는 조옮김 값 D가 주어진다. D의 절댓값은 50 이하이다.
악기 B를 위한 타브 악보를 위쪽 줄부터 K개의 줄에 출력한다.
-------------3-----------------0-------2---------------0----------------