Pagini recente » Cod sursa (job #2575778) | Cod sursa (job #2380816) | Cod sursa (job #2589846) | Romanii medaliati la IOI | Cod sursa (job #2586281)
#include <bits/stdc++.h>
#define MAX 10000000
#define SIZE_BUCKET 16
#define RADIX 0xffff
#define get_byte(x) ((x>>(byte * SIZE_BUCKET))&RADIX)
using namespace std;
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
int v[MAX + 5], temp[MAX + 5], vf[MAX + 5], sp[MAX + 5];
int n, a, b, c;
void radix(int A[], int B[], int byte)
{
int aux, nrBits;
memset(vf, 0, sizeof(vf));
for(int i = 0; i < n; i++)
++vf[get_byte(A[i])];
sp[0] = 0;
for(int i = 1; i < RADIX; i++)
sp[i] = sp[i - 1] + vf[i - 1];
for(int i = 0; i < n; i++)
B[sp[get_byte(A[i])]++] = A[i];
}
void solve()
{
v[0] = b % c;
for(int i = 1; i < n; i++)
v[i] = (1LL * a * v[i - 1] % c + b) % c;
for(int i = 0; i < 2; i++)
{
if(i % 2 == 0)radix(v, temp, i);
else radix(temp, v, i);
}
for(int i = 0; i < n; i += 10)
fout << v[i] << " ";
}
int main()
{
ios::sync_with_stdio(false);
fin.tie(0);
fout.tie(0);
srand(time(NULL));
fin >> n >> a >> b >> c;
solve();
fin.close();
fout.close();
return 0;
}