Pagini recente » Cod sursa (job #1184593) | Cod sursa (job #1197626) | Cod sursa (job #110649) | Cod sursa (job #2973167) | Cod sursa (job #3292906)
#include <iostream>
#include <bits/stdc++.h>
#define VMAX 10000005
#define INF 2147000000
using namespace std;
ifstream fin ("radixsort.in");
ofstream fout ("radixsort.out");
int numere[VMAX];
int aux_[VMAX];
int frcv[10];
int stanga[10];
long long int a,b,c;
signed main()
{
long long int n,m,i,j,k,t,q,nr,p;
fin>>n>>a>>b>>c;
nr=0;
for(i=1;i<=n;i++)
{
nr=(a*nr+b)%c;
numere[i]=nr;
}
for(p=1;1;p*=10)
{
for (int i = 0; i < 10; ++i)
frcv[i] = 0;
for(j=1;j<=n;j++)
{
frcv[(numere[j]/p)%10]++;
}
if(frcv[0]==n)
break;
stanga[0]=1;
for(i=1;i<10;i++)
stanga[i]=stanga[i-1]+frcv[i-1];
for(i=1;i<=n;i++)
{
aux_[stanga[(numere[j]/p)%10]++]=numere[i];
//un numar din grupa j va avea stanga[j] numere in fata sa, iar fara cifra sata
// ele sunt sortate crescator, deci in ordinea aparitiei, ele vor ocupa stanga[j], stanga[j+1]
// deci putem face stanga[j]++ pentru a ajunge la acea pozitie
}
swap(aux_,numere);
}
for(i=1;i<=n;i+=10)
fout<<numere[i]<<' ';
fout<<'\n';
return 0;
}