Submission

Status:

PPPPPPPPPPPPPPPPPPPP

Subtask/Task Score:

100/100

Score: 100

User: admin

Problemset: Chord and Inversions

Language: cpp

Time: 0.018 second

Submitted On: 2025-10-04 22:10:16

#include <stdio.h>
#include <string.h>

int min(int x, int y) {
	if (x <y) return x;
	return y;
}
int abs(int x) {
	if (x<0) return -x;
	return x;
}
char nx[12][20] = {
	"C",
	"C#",
	"D",
	"D#",
	"E",
	"F",
	"F#",
	"G",
	"G#",
	"A",
	"A#",
	"B"
};
int nint(char *note) {
	char base = note[0];
	int value = -1;
	switch (base) {
		case 'C':
            value = 0;
            break;
        case 'D':
            value = 2;
            break;
        case 'E':
            value = 4;
            break;
        case 'F':
            value = 5;
            break;
        case 'G':
            value = 7;
            break;
        case 'A':
            value = 9;
            break;
        case 'B':
            value = 11;
            break;
        default:
            return -1;
			
	}
	if (strlen(note) >= 2) if (note[1] == '#') value++;
	value %=12;
	return value;
}

int is_minor(char *note) {
	for (int i=0; note[i]!='\0'; i++) {
		if (note[i] == 'm') return 1;
	}
	return 0;
}

int d(int x, int y) {
	return min(abs(x-y), 12-abs(x-y));
}

int main() {
	int N, w;
	scanf("%d%d", &N, &w);
	int p=-1,q=-1,r=-1, a,b,c;
	for (int i=1; i<=N; i++) {
		char chord[5];
		scanf("%s", chord);
		
		if (is_minor(chord)) {
			a = nint(chord);
			b = a+3;
			c = a+7;
		} else {
			a = nint(chord);
			b = a+4;
			c = a+7;
		}
		b%=12;
		c%=12;
		
		if (i==1) {
			if (w == 0) {
				p=a;
				q=b;
				r=c;
			} else if (w == 1) {
				p=b;
				q=c;
				r=a;
			} else if (w == 2) {
				p=c;
				q=a;
				r=b;
			}
			printf("%s %s %s\n", nx[p],nx[q],nx[r]);
		} else {
			int d3 = d(p,c) + d(q,a) + d(r,b); 
			int d2 = d(p,b) + d(q,c) + d(r,a); 
			int d1 = d(p,a) + d(q,b) + d(r,c); 
			int fn = min(d1, min(d2,d3));
//		printf("%s %s %s\n", nx[p], nx[q],nx[r]);
				
//			printf("%d %d %d\n", a, b, c);
			if (fn == d1) {
				printf("%s %s %s", nx[a], nx[b],nx[c]);
				
				p=a;q=b;r=c;
			} else if (fn == d2) {
				printf("%s %s %s", nx[b], nx[c],nx[a]);
				p=b;q=c;r=a;
			} else {
//				printf("T : %d %d %d\n", c, a, b);
				printf("%s %s %s", nx[c], nx[a],nx[b]);
				p=c;q=a;r=b;
			}
			p%=12;
			q%=12;
			r%=12;
			
			printf("\n");
		}
	}
}