Cod sursa(job #1474062)

Utilizator glbglGeorgiana bgl glbgl Data 20 august 2015 20:32:16
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <stdio.h>
#include <fstream>
#include <algorithm>

#define NMAX 10000005

using namespace std;

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

int N, A, B, C;
int input[NMAX], output[NMAX];


void read(){

	in >> N >> A >> B >> C;
	
	input[1] = B;

	for(int i = 2; i <= N; ++i)
		input[i] = (1LL * A * input[i-1] + B) % C;
}

int maxi(){

	int m = input[1];
	for(int i = 2; i <= N; ++i)
		if(input[i] > m)
			m = input[i];

	return m;
}

void CountingSort(int b){

	
	int count[10] = {0};

	for(int i = 1; i < N+1; ++i)
		++count[(input[i]/b)%10];

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

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

	for(int i = 1; i < N+1; ++i){
		input[i] = output[i-1];
		output[i-1] = 0;
	}
}


void RadixSort(){

	int max = maxi();

	for(int b = 1; max/b > 0; b = 1LL * b * 10)
		CountingSort(b);

	for(int i = 1; i < N+1; i += 10)
		out << input[i] << ' ';

	out << "\n";
}



int main(){

	read();
	RadixSort();
	return 0;
}