Cod sursa(job #1995465)

Utilizator AdrianaMAdriana Moisil AdrianaM Data 28 iunie 2017 00:45:59
Problema Radix Sort Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <queue>
using namespace std;

typedef vector<unsigned int> VI;
typedef queue<unsigned int> QI;

int n, A, B, C;
VI v;

void read()
{
	ifstream is("radixsort.in");
	is >> n >> A >> B >> C;
	is.close();
}

void generate()
{
	v = VI(n + 1);
	v[1] = B;
	for (int i = 2; i <= n; ++i)
		v[i] = (A * v[i - 1] + B) % C;
}

void write();

void sort(int key)
{
	QI b[11];
	for (int i = 1; i <= n; ++i)
		b[v[i] <= key ? 10 : (v[i] / key) % 10].push(v[i]);
	int cnt = 1;
	while (!b[10].empty())
	{
		v[cnt++] = b[10].front();
		b[10].pop();
	}
	for (int i = 0; i <= 9; ++i)
		while (!b[i].empty())
		{
			v[cnt++] = b[i].front();
			b[i].pop();
		}
}

void solve()
{
	for (int i = 1; i <= C * 10; i *= 10)
		sort(i);
}

void write()
{
	ofstream os("radixsort.out");
	for (int i = 1; i <= n; i += 10)
		os << v[i] << " ";
	os.close();
}

int main()
{
	read();
	generate();
	solve();
	write();
	return 0;
}