Pagini recente » Cod sursa (job #2945481) | Cod sursa (job #2135814) | Clasament oni-2012-ziua2-11-12 | Cod sursa (job #1511196) | Cod sursa (job #2172766)
#include <iostream>
#include <cstdio>
using namespace std;
#define NMAX 10000001
int num[NMAX], bucket[10][NMAX];
int main()
{
freopen("radixsort.in", "r", stdin);
freopen("radixsort.out" , "w", stdout);
int n, a, b, c;
scanf("%d%d%d%d", &n, &a, &b, &c);
num[1] = b;
int maxim = b;
for(int i = 2; i <= n; ++i){
num[i] = (1LL * a * num[i - 1] % c + b % c) % c;
if(num[i] > maxim) maxim = num[i];
}
int zece = 1;
while(zece <= maxim){
int len0 = 0, len1 = 0, len2 = 0, len3 = 0, len4 = 0, len5 = 0, len6 = 0, len7 = 0, len8 = 0, len9 = 0, maxlen = 0;
for(int i = 1; i <= n; ++i){
if((num[i] / zece) % 10 == 0) bucket[(num[i] / zece) % 10][++len0] = num[i];
if((num[i] / zece) % 10 == 1) bucket[(num[i] / zece) % 10][++len1] = num[i];
if((num[i] / zece) % 10 == 2) bucket[(num[i] / zece) % 10][++len2] = num[i];
if((num[i] / zece) % 10 == 3) bucket[(num[i] / zece) % 10][++len3] = num[i];
if((num[i] / zece) % 10 == 4) bucket[(num[i] / zece) % 10][++len4] = num[i];
if((num[i] / zece) % 10 == 5) bucket[(num[i] / zece) % 10][++len5] = num[i];
if((num[i] / zece) % 10 == 6) bucket[(num[i] / zece) % 10][++len6] = num[i];
if((num[i] / zece) % 10 == 7) bucket[(num[i] / zece) % 10][++len7] = num[i];
if((num[i] / zece) % 10 == 8) bucket[(num[i] / zece) % 10][++len8] = num[i];
if((num[i] / zece) % 10 == 9) bucket[(num[i] / zece) % 10][++len9] = num[i];
}
int index = 0;
for(int i = 1; i <= len0; ++i) num[++index] = bucket[0][i];
for(int i = 1; i <= len1; ++i) num[++index] = bucket[1][i];
for(int i = 1; i <= len2; ++i) num[++index] = bucket[2][i];
for(int i = 1; i <= len3; ++i) num[++index] = bucket[3][i];
for(int i = 1; i <= len4; ++i) num[++index] = bucket[4][i];
for(int i = 1; i <= len5; ++i) num[++index] = bucket[5][i];
for(int i = 1; i <= len6; ++i) num[++index] = bucket[6][i];
for(int i = 1; i <= len7; ++i) num[++index] = bucket[7][i];
for(int i = 1; i <= len8; ++i) num[++index] = bucket[8][i];
for(int i = 1; i <= len9; ++i) num[++index] = bucket[9][i];
zece *= 10LL;
}
for(int i = 1; i <= n; i += 10)
printf("%d ", num[i]);
return 0;
}