Cod sursa(job #1248444)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 25 octombrie 2014 10:30:05
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *f=fopen("radixsort.in","r");
FILE *g=fopen("radixsort.out","w");
int n,a,b,c,v[10000001],put=1,maxim,nr;
bool ok;
struct nod{int val;
           nod *adr;
           nod() {val=0;
                  adr=NULL;}
           };
nod *p[10],*u[10];

inline void creeaza(int k)
{int j;
j=(k/put)%10;
if (p[j]==NULL) {p[j]=new nod;
                 p[j]->val=k;
                 p[j]->adr=NULL;
                 u[j]=p[j];
                 }
           else {nod *t=new nod;
                 t->val=k;
                 t->adr=NULL;
                 u[j]->adr=t;
                 u[j]=t;
                 }
}


int main()
{int i,j;
fscanf(f,"%d %d %d %d",&n,&a,&b,&c);
v[1]=b;
for (i=2;i<=n;i++) {v[i]=(a*(v[i-1])+b)%c;
                    maxim=max(maxim,v[i]);}
while (1LL*put<=maxim)
{for (i=1;i<=n;i++) {creeaza(v[i]);}
nr=0;
for (i=0;i<=9;i++) {nod *t=p[i];
                    while (t!=NULL) {v[++nr]=t->val;
                                     t=t->adr;}
                    }
for (i=0;i<=9;i++) {delete(p[i]);p[i]=NULL;
                    delete(u[i]);u[i]=NULL;
                    }
put=put*10;}

for (i=1;i<=n;i+=10) fprintf(g,"%d ",v[i]);
return 0;
}