Advertisement
Guest User

Untitled

a guest
Nov 27th, 2015
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.32 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <math.h>
  4.  
  5. using namespace std;
  6.  
  7. int f(int key, int radix) {
  8.     return (key / ( (int)pow(10, radix) ) ) % 10;
  9. }
  10. long long max(vector<long long> &a){
  11.     long long max = 0;
  12.     for (int i = 0; i < a.size(); i++){
  13.         if (max < a[i]) max = a[i];
  14.     }
  15.     return max;
  16. }
  17.  
  18. void foo(vector<long long> &a, int N){
  19.     long long max_elem = max(a);
  20.     vector<long long> counts(10);
  21.     int index = 0;
  22.     while (max_elem / (int)pow(10, index) > 0){
  23.         for (int i = 0; i < counts.size(); i++){
  24.             counts[i] = 0;
  25.         }
  26.         // Считаем, сколько раз встречаются f( a[i] ).
  27.         for (int i = 0; i < a.size(); ++i) {
  28.             ++counts[f(a[i], index)];
  29.         }
  30.         // Преобразуем в индексы концов групп.
  31.         for (int i = 1; i < 10; ++i) {
  32.             counts[i] += counts[i - 1];
  33.         }
  34.         // Сразу строим результат.
  35.         vector<long long> result(a.size());
  36.         for (int i = a.size() - 1; i >= 0; --i) {
  37.             int groupNumber = f(a[i], index);
  38.             --counts[groupNumber];
  39.             result[counts[groupNumber]] = a[i];
  40.         }
  41.         std::swap(a, result);
  42.         index++;
  43.     }
  44.    
  45. }
  46.  
  47. int main(){
  48.     int N = 0;
  49.     cin >> N;
  50.     vector<long long> arr(N);
  51.     for (int i = 0; i < N; i++){
  52.         cin >> arr[i];
  53.     }
  54.     foo(arr, N);
  55.  
  56.     for (int i = 0; i < N; ++i) {
  57.         std::cout << arr[i] << " ";
  58.     }
  59.  
  60.     cin >> N;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement