Cod sursa(job #3160717)

Utilizator davidpalagniucDavid Palagniuc davidpalagniuc Data 24 octombrie 2023 22:29:04
Problema Radix Sort Scor 30
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include <stdio.h>
#define ull unsigned long long
void rsort(ull v[], ull n, ull s, ull t[][2]) {
	ull it[2];
	it[0]=0;
	it[1]=0;
	for(ull i=0;i<n;++i) {
		ull p=((ull)(1))&(v[i]>>s);
		t[it[p]][p]=v[i];
		++it[p];
	}
	for(ull i=0;i<it[0];++i)
		v[i]=t[i][0];
	for(ull i=0;i<it[1];++i)
		v[it[0]+i]=t[i][1];
}
void radixsort(ull v[], ull n) {
	ull t[n][2];
	for(ull i=0;i<64;++i) {
		rsort(v,n,i,t);
	}
}
int main() {
	FILE *fin=fopen("radixsort.in","r");
	ull n,a,b,c;
	fscanf(fin,"%llu %llu %llu %llu",&n,&a,&b,&c);
	fclose(fin);
	ull v[n];
	*v=b;
	for(ull i=1;i<n;++i) v[i]=(a*v[i-1]+b)%c;
	radixsort(v,n);
	FILE *fout=fopen("radixsort.out","w");
	for(int i=0;i<n;i+=10) fprintf(fout,"%llu ",v[i]);
	return 0;
}