Cod sursa(job #1907870)

Utilizator tifui.alexandruTifui Ioan Alexandru tifui.alexandru Data 6 martie 2017 21:22:52
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("radixsort.in");
ofstream g("radixsort.out");
long long v[10000001];
int nrcf(long long n)
{
    int nr=0;
    while(n)
    {
        nr++;
        n/=10;
    }
    return nr;
}
struct nod{long long inf; nod *leg;};
nod a[10];
nod *in[10];
nod *sf[10];
void ad(int i, long long x)
{
    if(!in[i])
    {
        nod *p=new nod;
        p->inf=x;
        p->leg=NULL;
        in[i]=sf[i]=p;
    }
    else
    {
        nod *p=new nod;
        p->inf=x;
        p->leg=NULL;
        sf[i]->leg=p;
        sf[i]=p;
    }
}
int main()
{long long n,a,b,c,i,x;
f>>n>>a>>b>>c;
v[1]=b;
int maxx=nrcf(c);
for(i=2;i<=n;i++)
v[i]=(a*v[i-1]+b)%c;
int M,C,j;
for(M=10,C=1,j=1;j<=maxx;j++,M*=10,C*=10)
{
    for(i=1;i<=n;i++)
    {
        x=v[i]%M;
        x/=C;
        ad(x,v[i]);
    }
    n=0;
    for(i=0;i<=9;i++)
    if(sf[i])
    {
        nod *p=in[i];
        sf[i]=in[i]=NULL;
        while(p)
        {
            v[++n]=p->inf;
            nod *q=p;
            p=p->leg;
            delete q;
        }
    }
}
for(i=1;i<=n;i+=10)
g<<v[i]<<' ';

    return 0;
}