Pagini recente » Diferente pentru autumn-warmup-2007/solutii/runda-1 intre reviziile 12 si 11 | Monitorul de evaluare | Profil OvidiuPatru | Profil AlexiaPaunescu100 | Cod sursa (job #2013642)
#include <bits/stdc++.h>
using namespace std;
#define LMAX 10000005
int v[LMAX],aux[LMAX],Max=0;
inline void CountSort(int *v,int n,int byte){
int count[2]={0};
for(int i=1;i<=n;++i)
++count[(v[i]&byte)>0];
count[1]+=count[0];
for(int i=n;i;--i)
aux[count[(v[i]&byte)>0]--]=v[i];
for(int i=1;i<=n;++i)
v[i]=aux[i];
}
inline void RadixSort(int *v,int n){
for(int i=1;i<=min( (1<<30),Max );i<<=1){
CountSort(v,n,i);
if( i==(1<<30) ) break;
}
}
int main(){
freopen("radixsort.in","r",stdin);
freopen("radixsort.out","w",stdout);
int n;
long long a,b,c;
scanf("%d %lld %lld %lld",&n,&a,&b,&c);
for(int i=1;i<=n;++i){
long long x=(a*v[i-1]+b)%c;
v[i]=(int)x;
if(v[i]>Max) Max=v[i];
}
RadixSort(v,n);
for(int i=1;i<=n;i+=10)
printf("%d ",v[i]);
fclose(stdin);fclose(stdout);
return 0;
}