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");
}
}
}