Cod sursa(job #1313215)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 10 ianuarie 2015 13:45:34
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>
#define nmax 10000005
using namespace std;
ifstream f("radixsort.in");
ofstream g("radixsort.out");
int v[nmax],k[nmax],p[15];
int n,a,b,c;
int base;
long long basemax;

int main()
{
    int i,j;
    f>>n>>a>>b>>c;
    v[1]=b;
    basemax=1;
    for (i=2;i<=n;i++) {
        v[i]=(1LL* a * v[i-1]+b)%c;
    }
    for (i=1;i<=n;i++)
        while (v[i]>=basemax)
            basemax*=1LL*10;

    base=1;
    while (base<basemax) {

        for (i=0;i<=9;i++)
            p[i]=0;
        for (i=1;i<=n;i++)
            p[(v[i]/base)%10]++;

        for (i=1;i<=9;i++)
            p[i]+=p[i-1];

        for (i=n;i>=1;i--) {
            k[p[(v[i]/base)%10]--]=v[i];
        }
        for (i=1;i<=n;i++)
            v[i]=k[i];

        base*=10;
    }

    for (i=1;i<=n;i+=10) g<<v[i]<<' ';

    return 0;
}