Cod sursa(job #1250051)

Utilizator radudorosRadu Doros radudoros Data 27 octombrie 2014 19:35:46
Problema Radix Sort Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>
#include <queue>
using namespace std;

#define base 255
#define BUCKET_SIZE 8
#define N_MAX 10000000


ifstream fin("radix.in");
ofstream fout("radix.out");

unsigned int v[N_MAX + 1];
queue <unsigned int>bucket[256];



int main()
{




	long long n;
	int a, b, c;
	fin >> n >> a >> b >> c;
	v[1] = b;
	for (long long i = 2; i <= n; i++)
	{
		v[i] = ((long long)a*v[i - 1]+b) % c;
	}

	int k = 0;
	for (k; k < 32; k +=BUCKET_SIZE)
	{
		long long poz = 1;
		for (long long i = 1; i <= n; i++)
		{
			bucket[(v[i]>> (k))&base].push(v[i]);
		}
		for (int i = 0; i <= base; i++)
		{
			while (!bucket[i].empty())
			{
				v[poz] = bucket[i].front();
				bucket[i].pop();
				poz++;
			}
		}
	}

	for (long long i = 1; i <= n; i+=10)
	{
		fout << v[i] << ' ';
	}


}