Cod sursa(job #2125496)

Utilizator epermesterNagy Edward epermester Data 8 februarie 2018 15:17:51
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<fstream>
#include<deque>
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];
	
	int tiz = 1;
	for (; mx/tiz; tiz *= 10) {
		int hany[10];
		for (int i = 0;i <= 9;++i)
			hany[i] = 0;
		long long *result = new long long[N];		//
		for (int i = 0;i < N;++i)
			hany[(v[i] / tiz) % 10]++;
		for (int i = 1;i <= 9;++i)
			hany[i] += hany[i - 1];
		for (int i = N-1;i >= 0;--i) {
			result[hany[(v[i] / tiz) % 10] - 1] = v[i];
			hany[(v[i] / tiz) % 10]--;
		}
		for (int i = 0;i < N;++i)
			v[i] = result[i];
		;
	}
	
	ofstream out("radixsort.out");
	for (int i = 0;i < N;i+=10)
		out << v[i] << " ";
}