시간 제한
메모리 제한
시간 제한
2초
메모리 제한
128 MB
음악에서 음표 이름은 다음 12개가 오름차순으로 반복된다.
A, A#, B, C, C#, D, D#, E, F, F#, G, G#
G#보다 한 음 높은 음은 A이고, B보다 다섯 음 낮은 음은 F#이다. 따라서 어떤 음에서 12음 떨어진 음은 다시 같은 이름의 음이다. 이 문제에서는 옥타브가 달라도 이름이 같으면 같은 음으로 본다.
기타에는 N개의 줄이 있고, 각 줄은 위 12개 음 중 하나로 조율되어 있다. 아무 프렛도 누르지 않고 줄을 튕겼을 때 나는 소리를 그 줄의 열린 음이라고 한다. i번 프렛을 누르고 줄을 튕기면 열린 음보다 i음 높은 음이 난다. 열린 음이 C#인 줄에서 3번 프렛을 누르면 E가 난다.
코드는 동시에 울리는 서로 다른 음의 집합이다. 코드를 연주하려면 각 줄이 코드에 포함된 음 중 하나를 내야 하고, 코드에 포함된 모든 음이 적어도 한 번씩 울려야 한다.
연주 난이도는 프렛을 누른 줄만 보고 정한다. 누른 프렛 번호 중 최댓값에서 최솟값을 뺀 뒤 1을 더한 값이 난이도이다. 열린 줄은 계산에 포함하지 않는다. 어떤 코드가 열린 줄만으로 연주 가능하면 난이도는 0이다.
기타 줄 수 N, 각 줄의 열린 음, 그리고 코드에 포함된 M개의 음이 주어진다. 가능한 연주 방법 중 난이도의 최솟값을 구하라.
첫째 줄에 N과 M이 주어진다. N은 기타 줄의 개수이고, M은 코드를 구성하는 음의 개수이다.
둘째 줄에는 각 줄의 열린 음을 나타내는 N개의 음이 주어진다. 셋째 줄에는 코드를 구성하는 M개의 음이 주어진다.
코드를 구성하는 음은 중복되지 않는다. 입력에 나오는 모든 음은 문제에서 제시한 12개 이름 중 하나이다.
가능한 연주 방법 중 난이도의 최솟값을 출력한다.
열린 줄은 난이도 계산에서 제외된다. 따라서 어떤 줄은 열린 음으로 코드의 한 음을 담당하게 하고, 다른 줄들에서 누른 프렛의 범위만 줄이는 선택이 최적이 될 수 있다. 프렛 번호는 음 이름이 12음마다 반복된다는 점을 이용해 비교한다.