Cod sursa(job #1992061)

Utilizator PlatenitesVoicu Cristian Platenites Data 19 iunie 2017 12:10:42
Problema Radix Sort Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<fstream>

using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int *v, n, c[10];

void radix(int maxim)
{
	int pas = 1;
	int *nv = (int*)malloc((n+1)*sizeof(int));
	memset((int*)nv, 0, n * sizeof(int));
	while (maxim / pas > 0) {
		for (int i = 1; i <= n; i++) {
			c[(v[i] / pas) % 10] ++;
		}
		for (int i = 1; i <= 9; i++) {
			c[i] = c[i] + c[i - 1];
		}
		for (int i = n; i >= 1; i--) {
			int poz = (v[i] / pas) % 10;
			nv[c[poz]] = v[i];
			c[poz]--;
		}
		for (int i = 1; i <= n; i++)
			v[i] = nv[i];
		memset((int*)c, 0, 10 * sizeof(int));
		pas = pas * 10;
	}
}
int main()
{
	int a, b, c;
	int maxim = -858993460;
	f >> n >> a >> b >> c;
	v = (int *)malloc((n + 1) * sizeof(int));
	v[1] = a;
	a %= c;
	c %= c;
	for (int i = 2; i <= n; ++i) {
		v[i] = (a * v[i - 1] + b) % c;
	}
	radix(maxim);
	for (int i = 1; i <= n; i++) {
		g << v[i] << " ";
	}
	return 0;
}