Pagini recente » Profil gabriela-ivascu | Monitorul de evaluare | Cod sursa (job #2348746) | Cod sursa (job #2124649) | Cod sursa (job #2579620)
#include <bits/stdc++.h>
#define ULL unsigned long long
#define UI unsigned int
using namespace std;
ifstream in("radixsort.in");
ofstream out("radixsort.out");
UI n;
UI sir[10000001],maxim;
ULL P,Val,Add,Mod;
UI vf[10000001],urm[10000001],last[10],apar[10],nr;
void adauga(int cif,int val)
{
vf[++nr]=val;
urm[nr]=last[cif];
last[cif]=nr;
apar[cif]++;
}
int main()
{
in>>n>>P>>Add>>Mod;
sir[1]=Add;
for(UI i=2;i<=n;i++)
{
Val=sir[i-1];
sir[i]=(P*Val+Add)%Mod;
maxim=max(maxim,sir[i]);
}
maxim=log10(maxim)+1;
for(UI i=1,exp=1;i<=maxim;i++,exp*=10)
{
for(UI j=0;j<=9;j++)
last[j]=apar[j]=0;
nr=0;
for(UI j=1;j<=n;j++)
adauga( sir[j]/exp%10 , sir[j] );
UI poz=0;
for(UI cif=0;cif<=9;cif++)
{
for(UI k=last[cif],l=0;k;k=urm[k],l++)
sir[poz+apar[cif]-l]=vf[k];
poz+=apar[cif];
}
}
for(UI i=1;i<=n;i+=10)
out<<sir[i]<<' ';
return 0;
}