Pagini recente » Cod sursa (job #1063192) | Cod sursa (job #1278093) | Cod sursa (job #2255366) | Cod sursa (job #2901769) | Cod sursa (job #1313746)
#include <iostream>
#include<cstdio>
#include <cstdlib>
#include <queue>
using namespace std;
unsigned int rest1,rest2,rest3,rest4,v[10000002];
queue<unsigned int> coada[256];
unsigned int a,b,c,n;
void adauga(unsigned int nr, unsigned int poz)
{
coada[poz].push(nr);
}
void descarca()
{ int dimv=0;
for(int i=0; i<256; i++)
while(!coada[i].empty())
{
dimv++;
v[dimv]=coada[i].front();
coada[i].pop();
}
}
int main()
{
rest1=255;
rest2=rest1<<8;
rest3=rest2<<8;
rest4=rest3<<8;
freopen("radixsort.in","r",stdin);
freopen("radixsort.out","w",stdout);
cin>>n>>a>>b>>c;
unsigned int anterior,curent;
anterior=b;
adauga(anterior,anterior&rest1);
for(int i=2; i<=n; i++)
{
curent=(a*anterior+b)%c;
adauga(curent,curent&rest1);
anterior=curent;
}
descarca();
for(int i=1; i<=n; i++)
adauga(v[i],(v[i]&rest2)>>8);
descarca();
for(int i=1; i<=n; i++)
adauga(v[i],(v[i]&rest3)>>16);
descarca();
for(int i=1; i<=n; i++)
adauga(v[i],(v[i]&rest4)>>24);
descarca();
for(int i=1; i<=n; i++)if(i%10 == 1)cout<<v[i]<<" ";
return 0;
}