Cod sursa(job #1315818)

Utilizator ZenusTudor Costin Razvan Zenus Data 13 ianuarie 2015 09:36:19
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <cstdio>
#include <algorithm>
#include <queue>

using namespace std;

#define NMAX 10000007

deque < int > H[10];
deque < int > :: iterator f;
int N,A,B,C,i,t,shift;
int V[NMAX];

int main()
{
freopen("radixsort.in","r",stdin);
freopen("radixsort.out","w",stdout);

scanf("%d%d%d%d",&N,&A,&B,&C);
for (i=2,V[1]=B;i<=N;++i)
V[i]=(1LL*A*V[i-1]+B)%C;

for (shift=t=1;t<=10;++t)
{
    for (i=1;i<=N;++i)
    H[(V[i]/shift)%10].push_back(V[i]);

    V[0]=0;
    for (i=0;i<=9;++i)
    for (f=H[i].begin();f!=H[i].end();++f)
    V[++V[0]]=*f;

    for (i=0;i<=9;++i)
    while (!H[i].empty()) H[i].pop_back();

    shift*=10;
}

for (i=1;i<=V[0];i+=10)
printf("%d ",V[i]);

return 0;
}