Pagini recente » Cod sursa (job #2101377) | Cod sursa (job #3307311) | Cod sursa (job #2333919) | Cod sursa (job #2333910) | Cod sursa (job #2212417)
#include<string.h>
#include<fstream>
#include<iostream>
using namespace std;
#define MAX 10000001
const int crit=(1<<16);
int v[MAX], aux[MAX], group[crit+1];
int main(){
ifstream in("radixsort.in");
int n, a, b, c, i;
unsigned long long prev;
in>>n>>a>>b>>c;
in.close();
prev=b; v[1]=prev; group[b%crit]++;
for(i=2;i<=n;i++){
prev=(a*prev+b)%c;
v[i]=prev;
group[v[i]%crit]++;
}
for(i=1;i<=crit;i++) group[i]+=group[i-1];
for(i=n;i>=1;i--){
a=v[i]%crit;
aux[group[a]]=v[i];
group[a]--;
}
memset(group,0,sizeof group);
for(i=1;i<=n;i++) group[aux[i]/crit]++;
for(i=1;i<=crit;i++) group[i]+=group[i-1];
for(i=n;i>=1;i--){
a=aux[i]/crit;
v[group[a]]=aux[i];
group[a]--;
}
FILE *out=fopen("radixsort.out","w");
for(i=1;i<=n;i+=10) fprintf(out,"%d ",v[i]);
fclose(out);
return 0;
}