Cod sursa(job #1552255)

Utilizator alittlezzCazaciuc Valentin alittlezz Data 17 decembrie 2015 16:42:15
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <bits/stdc++.h>

using namespace std;

int v[10000005];
int va[10000005];
int q[10];

int main()
{
    int i,n,A,B,C,mm,c,cnt,m;
    freopen("radixsort.in", "r", stdin);
    freopen("radixsort.out", "w", stdout);
    scanf("%d %d %d %d",&n,&A,&B,&C);
    v[1] = B%C;
    for(i = 2;i <= n;i++){
        v[i] = (1LL*A*v[i-1]+B)%C;
    }
    m = 10;
    mm = 1;
    while(m <= 1e9){
        for(i = 1;i <= n;i++){
            c = (v[i]%m)/mm;
            q[c]++;
        }
        for(i = 1;i <= 9;i++){
            q[i] += q[i-1];
        }
        for(i = n;i >= 1;i--){
            c = (v[i]%m)/mm;
            va[q[c]] = v[i];
            q[c]--;
        }
        for(i = 1;i <= n;i++){
            v[i] = va[i];
        }
        for(i = 0;i <= 9;i++){
            q[i] = 0;
        }
        m *= 10;
        mm *= 10;
    }
    for(i = 1;i <= n;i += 10){
        printf("%d ",v[i]);
    }
    return 0;
}