Cod sursa(job #2125573)

Utilizator epermesterNagy Edward epermester Data 8 februarie 2018 16:10:46
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<fstream>
using namespace std;

int main() {
	ifstream in("radixsort.in");
	int N, A, B, C;
	in >> N >> A >> B >> C;

	long long *v = new long long[N];
	v[0] = B;
	for (int i = 1;i < N;++i)
		v[i] = ((A * v[i - 1]) % C + B) % C;

	int mx = v[0];
	for (int i = 1; i < N; i++)
		if (v[i] > mx)
			mx = v[i];

	for (long long tiz = 1; mx / tiz; tiz *= 10) {
		int *output = new int[N];
		int i, count[10] = { 0 };

		for (i = 0; i < N; i++)
			count[(v[i] / tiz) % 10]++;

		for (i = 1; i < 10; i++)
			count[i] += count[i - 1];

		for (i = N - 1; i >= 0; i--)
		{
			output[count[(v[i] / tiz) % 10] - 1] = v[i];
			count[(v[i] / tiz) % 10]--;
		}

		for (i = 0; i < N; i++)
			v[i] = output[i];
	}

	ofstream out("radixsort.out");
	for (int i = 0;i < N;i += 10)
		out << v[i] << " ";
	return 0;
}