dsa-1/3/C.cpp
2025-05-29 19:24:43 +03:00

49 lines
976 B
C++

#include <iostream>
typedef long long ll;
void RadixSort(char** arr, const ll size, const ll offset) {
if (size == 1)
return;
int i, j, idx;
idx = 0;
i = idx;
j = 1;
while (idx < size) {
while (arr[i][offset] > arr[j][offset]) {
std::swap(arr[i], arr[j]);
if (i == 0)
break;
--j;
--i;
}
i = idx;
j = ++idx;
}
}
int main() {
ll messages_size, message_length, max_offset;
std::cin >> messages_size >> message_length >> max_offset;
char** messages = new char* [messages_size];
for (ll i = 0; i < messages_size; ++i) {
messages[i] = new char[message_length];
for (ll j = 0; j < message_length; ++j){
std::cin >> messages[i][j];
}
}
for (ll offset = message_length - 1; message_length - offset - 1 < max_offset; --offset) {
RadixSort(messages, messages_size, offset);
}
for (ll i = 0; i < messages_size; ++i) {
std::cout << messages[i] << '\n';
}
return 0;
}