#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include using namespace std; int L=14, R=15, N, pos = 1; int timer; int T[27][27], in[201], result[27], test_res[27], mark[27]; struct max_letter{ int num, value; bool operator < (const max_letter &a) const { return (this->value > a.value); } }max_let[27]; char letters[] = { 'q','q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m' }; int x[] = { 0,0,38,76,114,152,190,228,266,304,342,10,48,86,124,162,200,239,277,315,37,75,113,151,190,228,266 }; int y[] = { 0,0,0,0,0,0,0,0,0,0,0,39,39,39,39,39,39,39,39,39,79,79,79,79,79,79,79 }; int row_conversion[] = { 11,24,22,13,3,14,15,16,8,17,18,19,26,25,9,10,1,4,12,5,7,23,2,21,6,20 }; char cin[201]; int scheme1[] = { 0,14,15,13,16,22,23,4,5,24,6,21,3,12,20,2,17,7,25,18,26,8,19,9,11,10,1 }; void SetMaxLet() { for (int i = 1; i < 27; i++) { max_let[i].num = i; for (int j = 1; j <= N; j++) { if (i == in[j]) max_let[i].value++; } } stable_sort(&max_let[1], &max_let[27]); } void SetTab() { for (int i = 1; i < 27; i++) { for (int j = 1; j < 27; j++) { T[i][j] = T[j][i] = (int)round(sqrt((x[i] - x[j])*(x[i] - x[j]) + (y[i] - y[j])*(y[i] - y[j]))); } } } void FormatOut() { for (int i = 1; i < 27; i++){ if (result[i] == 0) { result[i] = max_let[pos].num; pos++; } } } void Solve1() { SetMaxLet(); for (int i = 1; i < 27; i++) { if (scheme1[i] == 0) continue; result[scheme1[i]] = max_let[i].num; pos++; } FormatOut(); } void Input() { FILE *fin = fopen("keyboard.in", "r"); fscanf(fin, "%i\n", &N); fscanf(fin, "%s", cin); for (int i = 0; i < N; i++) { in[i+1] = row_conversion[cin[i] - 'a']; } } void Output(){ FILE *out = fopen("keyboard.out", "w"); for (int i = 1; i < 27; i++) { fprintf(out, "%c", letters[result[i]]); } fprintf(out, "\n"); fprintf(out, "%i %i", L, R); } int main() { SetTab(); Input(); Solve1(); Output(); return 0; }