Cod sursa(job #2451158)

Utilizator uvIanisUrsu Ianis Vlad uvIanis Data 25 august 2019 22:50:10
Problema Radix Sort Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <bits/stdc++.h>

using namespace std;

size_t v[10000001], A, B, C, N;

vector<vector<size_t>> buckets(10, vector<size_t>());

ifstream fin("radixsort.in");
ofstream fout("radixsort.out");


int main()
{
    fin >> N >> A >> B >> C;
    v[1] = B;

    size_t MAX{B};

    for(size_t i = 2; i <= N; i++)
    {
        v[i] = (1LL * A * v[i - 1] + B) % C;
        MAX = max(MAX, v[i]);
    }

    size_t nr{0};
    while(MAX)
    {
        nr++;
        MAX /= 10;
    }

    for(size_t c = 0; c < nr; c++)
    {
       for(size_t i = 1; i <= N; i++)
       {
           size_t copy_c = c;
           size_t copy_v = v[i];

           while(copy_c && copy_v){
                copy_v /= 10;
                copy_c --;
           }

           buckets[copy_v%10].push_back(v[i]);
       }

       size_t line = 0;
       size_t column = 0;
       for(size_t i = 1; i <= N; i++)
       {
           if(column == buckets[line].size())
           {
               column = 0;
               line++;
               while(buckets[line].size() == 0) line++;
           }

           v[i] = buckets[line][column];
           column++;
       }

       for(size_t i = 0; i < 10; i++) buckets[i].clear();
    }

    for(size_t i = 1; i <= N; i += 10) fout << v[i] << " ";
}