Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <math.h>
- using namespace std;
- int f(int key, int radix) {
- return (key / ( (int)pow(10, radix) ) ) % 10;
- }
- long long max(vector<long long> &a){
- long long max = 0;
- for (int i = 0; i < a.size(); i++){
- if (max < a[i]) max = a[i];
- }
- return max;
- }
- void foo(vector<long long> &a, int N){
- long long max_elem = max(a);
- vector<long long> counts(10);
- int index = 0;
- while (max_elem / (int)pow(10, index) > 0){
- for (int i = 0; i < counts.size(); i++){
- counts[i] = 0;
- }
- // Считаем, сколько раз встречаются f( a[i] ).
- for (int i = 0; i < a.size(); ++i) {
- ++counts[f(a[i], index)];
- }
- // Преобразуем в индексы концов групп.
- for (int i = 1; i < 10; ++i) {
- counts[i] += counts[i - 1];
- }
- // Сразу строим результат.
- vector<long long> result(a.size());
- for (int i = a.size() - 1; i >= 0; --i) {
- int groupNumber = f(a[i], index);
- --counts[groupNumber];
- result[counts[groupNumber]] = a[i];
- }
- std::swap(a, result);
- index++;
- }
- }
- int main(){
- int N = 0;
- cin >> N;
- vector<long long> arr(N);
- for (int i = 0; i < N; i++){
- cin >> arr[i];
- }
- foo(arr, N);
- for (int i = 0; i < N; ++i) {
- std::cout << arr[i] << " ";
- }
- cin >> N;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement