Cod sursa(job #1394566)

Utilizator alexburdescuBurdescu Alexandru alexburdescu Data 20 martie 2015 13:51:25
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include<fstream>
using namespace std;
int a[2][10000002],n,cif[10],pstart[10],poz[10],i,A,B,C,in,out,k,x,r;
long long z;
int main ()
{
    ifstream fin("radixsort.in");
    ofstream fout("radixsort.out");
    fin>>n>>A>>B>>C;
    a[0][1]=B;
    for(i=2;i<=n;i++)
    {
        a[0][i]=(A*a[0][i-1]+B)%C;
    }
    in=1;
    out=0;
    z=1;
    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();
    return 0;
}