Pagini recente » Cod sursa (job #1387076) | Cod sursa (job #1478563) | Monitorul de evaluare | Cod sursa (job #2098668) | Cod sursa (job #2212382)
#include<iostream>
#include<fstream>
#include<string.h>
using namespace std;
#define MAX 10000001
const int crit=1<<16;
int v[MAX], group[crit+1], aux[MAX];
int main(){
ifstream in("radixsort.in");
int n, a, b, c;
in>>n>>a>>b>>c;
int i;
in.close();
v[1]=b; group[b%crit]++;
for(i=2;i<=n;i++){
v[i]=(a*v[i-1]+b)%c;
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]);
return 0;
}