Cod sursa(job #1394564)

Utilizator TomescuAngeloTomescu Angelo TomescuAngelo Data 20 martie 2015 13:50:13
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<fstream>
using namespace std;
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
int a[2][10000002],n;
int cif[10],pstart[10],poz[10],i,j,in,out,r,x,aa,bb,cc,k;
long long z;
int main()
{
    fin>>n>>aa>>bb>>cc;
    z=1;
    a[0][1]=bb;
    for(i=2;i<=n;i++)
    {
        a[0][i]=(aa*a[0][i-1]+bb)%cc;
    }
    in=1;
    out=0;
    for(k=1;k<=9;k++)
    {
        in=1-in;
        out=1-out;
        for(i=0;i<=9;i++)
        {
            cif[i]=0;
        }
        for(i=1;i<=n;i++)
        {
            x=a[in][i];
            r=(x/z)%10;
            cif[r]++;
        }
        pstart[0]=1;
        poz[0]=1;
        for(i=1;i<=9;i++)
        {
            pstart[i]=pstart[i-1]+cif[i-1];
            poz[i]=pstart[i];
        }
        for(i=1;i<=n;i++)
        {
            x=a[in][i];
            r=(x/z)%10;
            a[out][poz[r]]=x;
            poz[r]++;
        }
        z=z*10;
    }
    for(i=1;i<=n;i=i+10)
    {
        fout<<a[out][i]<<" ";
    }
    fin.close();
    fout.close();
}