Pagini recente » Cod sursa (job #1908936) | Cod sursa (job #1281105) | Cod sursa (job #798409) | Cod sursa (job #754315) | Cod sursa (job #2356347)
#include <fstream>
#include <cstring>
#define RADIX 0xFF
#define get_byte(x) ((x>>(byte * 8))&RADIX)
using namespace std;
ifstream f("radixsort.in");
ofstream g("radixsort.out");
int fr[10000005],n,a,b,c,v[10000005],j,maxim,temp[10000005]; long long base,basesp,limita;
inline void count_sort (int A[], int B[], int byte)
{
int cnt[256];
int ord[256];
memset(cnt, 0, sizeof(cnt));
memset(ord, 0, sizeof(ord));
for(int i=1; i<=n; ++i)
{++cnt[get_byte(A[i])];
}
ord[0]=0;
for(int i=1; i<256; ++i)
{
ord[i]=ord[i-1]+cnt[i-1];
}
for(int i=1; i<=n; ++i)
{
B[++ord[get_byte(A[i])]]=A[i];
}
return;
}
int main()
{
f>>n>>a>>b>>c;
v[1]=b;
for (int i=2;i<=n;i++)
{
v[i]=(1LL*a*v[i-1]+b)%c;
}
limita=sizeof(v[1]);
for (int i=0;i<limita;i++)
{
if (i%2==0)
{
count_sort(v,temp,i);
}
else
{
count_sort(temp,v,i);
}
}
for (j=1;j<=n;j+=10)
{
g<<v[j]<<" ";
}
return 0;
}