Cod sursa(job #1251528)

Utilizator vlad2901Vlad Berindei vlad2901 Data 29 octombrie 2014 17:26:26
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <vector>
#include <queue>
#include <iostream>

using namespace std;

ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
queue<int> bucket1[256];
queue<int> bucket2[256];

int main() {
	long a, b, c, n;
	fin >> n >> a >> b >> c;
	int val = b;
	for (int i = 1; i < n; ++i) {
		bucket1[val & 0x000000ff].push(val);
		val = (a * val + b) % c;
	}
	bucket1[val & 0x000000ff].push(val);
	for (int b = 0; b < 256; ++b) {
		while (!bucket1[b].empty()) {
			val = bucket1[b].front();
			bucket1[b].pop();
			bucket2[(val & 0x0000ff00) >> 8].push(val);
		}
	}
	for (int b = 0; b < 256; ++b) {
		while (!bucket2[b].empty()) {
			val = bucket2[b].front();
			bucket2[b].pop();
			bucket1[(val & 0x00ff0000) >> 16].push(val);
		}
	}
	for (int b = 0; b < 256; ++b) {
		while (!bucket1[b].empty()) {
			val = bucket1[b].front();
			bucket1[b].pop();
			bucket2[(val & 0xff000000) >> 24].push(val);
		}
	}
	int count = 0;
	for (int b = 0; b < 256; ++b) {
		while (!bucket2[b].empty()) {
			if (count % 10 == 0) {
				fout << bucket2[b].front() << " ";
			}
			bucket2[b].pop(); 
			++count;
		}
	}
	return 0;
}