Pagini recente » Cod sursa (job #2918610) | Cod sursa (job #2661713) | Cod sursa (job #2602906) | Cod sursa (job #2139611) | Cod sursa (job #3259973)
#pragma GCC optimize("Ofast,unroll-loops")
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <bits/stdc++.h>
using namespace std;
#define MAXN 10000001
#define MAXCIF 10
int n;
int v[MAXN];
vector<int> bucket[10];
int main(){
FILE *fin, *fout;
fin = fopen("radixsort.in", "r");
int a,b,c;
fscanf(fin, "%d%d%d%d", &n, &a, &b, &c);
v[0] = b;
for(int i=1; i<n; i++){
v[i] = (a*v[i-1]+b)%c;
}
fclose(fin);
int p10 = 1;
for(int i=1; i<=MAXCIF; i++){
for(int i=0; i<n; i++){
bucket[v[i]/p10%10].push_back(v[i]);
}
memset(v, 0, sizeof(v));
int j = 0;
//printf("BUCKETS:\n");
for(int i=0; i<10; i++){
//printf("%d:", i);
for(auto y: bucket[i]){
// printf("%d ", y);
v[j++] = y;
}
//printf("\n");
bucket[i].clear();
}
p10*=10;
/*printf("ARRAY:\n");
for(int i=0; i<n; i++){
printf("%d ", v[i]);
}
printf("\n\n");*/
}
fout = fopen("radixsort.out", "w");
for(int i=0; i<n; i+=10){
fprintf(fout, "%d ", v[i]);
}
fprintf(fout, "\n");
fclose(fout);
}