Pagini recente » Cod sursa (job #2586039) | Cod sursa (job #868560) | Cod sursa (job #796316) | Cod sursa (job #2398955) | Cod sursa (job #1424760)
#include <iostream>
#include <deque>
#include <vector>
#include <cstring>
#include <bitset>
#include <algorithm>
#define INF 1000010
#define uint unsigned int
#define ll long long
#define step(x) (x&(-x))
using namespace std;
int N, A, B, C, i, cnt;
vector<int> v, sol;
void radixsort(vector<int> &V, int step)
{
if(step == 4)
{
for(vector<int>::iterator it = V.begin(); it!=V.end(); it++)
{
cnt = cnt + 1;
if(cnt % 10 == 1)
printf("%d ",*it);
}
return;
}
vector<int> chunk[257];
int st = 32 - (step + 1) * 8;
for(vector<int>::iterator it = V.begin(); it!=V.end(); it++)
{
int x = *it;
int nr = 0;
for(int i = 0; i < 8; i++)
{
if(x & (1<<(st+i)))
nr = nr + (1<<i);
}
chunk[nr].push_back(x);
}
for(int i = 0; i < 257; i++)
if(chunk[i].size())
{
radixsort(chunk[i], step + 1);
chunk[i].clear();
}
}
int main()
{
freopen("radixsort.in","r",stdin);
freopen("radixsort.out","w",stdout);
scanf("%d%d%d%d", &N, &A, &B, &C);
v.push_back(B);
for(i = 1; i < N; i++)
v.push_back((A * v[i-1] + B) % C);
radixsort(v, 0);
return 0;
}