Cod sursa(job #1853117)

Utilizator BrandonChris Luntraru Brandon Data 21 ianuarie 2017 14:05:07
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <cstring>

using namespace std;

ifstream cin ("radixsort.in");
ofstream cout ("radixsort.out");

const int MaxN = 10000005, BlockMod = 256;

int n, a, b, c;
int v[MaxN], modCount[BlockMod + 5], auxV[MaxN];

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

	for (int currBlock = 0; currBlock < 32; currBlock += 8) {
		memset(modCount, 0, sizeof modCount);
		for (int i = 1; i <= n; ++i) {
			int currMod = (v[i] >> currBlock) % BlockMod;
			++modCount[currMod + 1];
		}

		for (int i = 1; i <= 256; ++i) {
			modCount[i] += modCount[i - 1];
		}

		memset(auxV, 0, sizeof auxV);
		for (int i = 1; i <= n; ++i) {
			int currMod = (v[i] >> currBlock) % BlockMod;
			auxV[++modCount[currMod]] = v[i];
		}

		for (int i = 1; i <= n; ++i) {
			v[i] = auxV[i];
		}
	}

	for (int i = 1; i <= n; i += 10) {
		cout << v[i] << ' ';
	}
	return 0;
}