Cod sursa(job #2212417)

Utilizator b10nd3Oana Mancu b10nd3 Data 13 iunie 2018 23:20:53
Problema Radix Sort Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<string.h>
#include<fstream>
#include<iostream>

using namespace std;

#define MAX 10000001

const int crit=(1<<16);
int v[MAX], aux[MAX], group[crit+1];

int main(){
	ifstream in("radixsort.in");
	int n, a, b, c, i;
	unsigned long long prev;
	in>>n>>a>>b>>c; 
	in.close();
	prev=b; v[1]=prev; group[b%crit]++;
	for(i=2;i<=n;i++){
		prev=(a*prev+b)%c;
		v[i]=prev;
		group[v[i]%crit]++;
	} 
	for(i=1;i<=crit;i++) group[i]+=group[i-1];
	for(i=n;i>=1;i--){
		a=v[i]%crit;
		aux[group[a]]=v[i];
		group[a]--;
	}
	memset(group,0,sizeof group); 
	for(i=1;i<=n;i++) group[aux[i]/crit]++;
	for(i=1;i<=crit;i++) group[i]+=group[i-1];
	for(i=n;i>=1;i--){
		a=aux[i]/crit;
		v[group[a]]=aux[i];
		group[a]--;
	}
	FILE *out=fopen("radixsort.out","w");
	for(i=1;i<=n;i+=10)  fprintf(out,"%d ",v[i]);
	fclose(out);
	return 0;
}