Pagini recente » Borderou de evaluare (job #1509611) | Borderou de evaluare (job #2297136) | Borderou de evaluare (job #2078461) | Borderou de evaluare (job #1467504) | Cod sursa (job #2042411)
#include <fstream>
#define in "radixsort.in"
#define out "radixsort.out"
#define N 10000003
#define CIF 10
using namespace std;
ifstream fin(in);
ofstream fout(out);
const int MAX = 1<<31 - 1;
struct nod
{
nod *urm;
int info;
}*p[CIF],*u[CIF];
int v[N];
int n,A,B,C;
void init()
{
fin>>n>>A>>B>>C;
v[1] = B;
for(int i=2; i<=n; ++i)
v[i] = ((long long)A * v[i-1] + B)%C;
}
inline void add_nod(const int &val,const int &b)
{
nod *c = new nod;
c->info = val;
c->urm = NULL;
if(p[b] == NULL)
p[b] = u[b] = c;
else
{
u[b]->urm = c;
u[b]= c;
}
}
void radix()
{
int k;
for(int pw = 1; pw <= MAX; pw*=10)
{
for(int i=1; i<=n; ++i) add_nod(v[i],(v[i]/pw)%10);
k = 0;
for(int i=0; i<CIF; ++i)
{
nod *c,*q;
c = p[i];
while(c != NULL){v[++k] = c->info;q = c;c = c->urm;delete q;}
p[i] = NULL;
}
}
}
void afis()
{
for(int i=1; i<=n; i+=10)
fout<<v[i]<<" ";
}
int main()
{
init();
radix();
afis();
fin.close();
fout.close();
return 0;
}