Pagini recente » Cod sursa (job #1349523) | Cod sursa (job #2402850) | Cod sursa (job #1166432) | Cod sursa (job #2986606) | Cod sursa (job #2622757)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("radixsort.in");
ofstream out("radixsort.out");
void counting(vector<long long> &a, long long times, long long ma, long long n)
{
long long nr[10]={0};
vector<long long> result(n);
for(long long i=0;i<n;i++)
{ int cifra=(a[i]/times)%10;
nr[cifra]++;
}
for(long long i=1;i<10;i++)
nr[i]+=nr[i-1];
for(long long i=n-1;i>=0;i--)
{
int cifra=(a[i]/times)%10;
result[nr[cifra]-1]=a[i];
nr[cifra]--;
}
for(int i=0;i<n;i++)
a[i]=result[i];
}
void radixsort(vector<long long> &a, long long n)
{
long long ma=-1;
for(long long i=0;i<n;i++)
if(ma<a[i])ma=a[i];
long long times=1;
while(ma/times>0)
{
counting(a,times,ma,n);
times*=10;
}
}
int main()
{
long long N,A,B,C;
in>>N>>A>>B>>C;
vector<long long>a(N);
a[0]=B;
for(long long i=1;i<N;i++)
a[i]=(A*a[i-1]+B)%C;
radixsort(a,N);
for(long long i=0;i<N;i+=10)
out<<a[i]<<" ";
return 0;
}