Pagini recente » Cod sursa (job #2223440) | Monitorul de evaluare | Cod sursa (job #1888488) | Istoria paginii utilizator/bgdnachim | Cod sursa (job #2012534)
//#include<iostream>
#include <fstream>
#include <algorithm>
using namespace std;
int n,arr[10000005];
ifstream cin("radixsort.in");
ofstream cout("radixsort.out");
int getMax(int n)
{
int mx = arr[1];
for (int i = 2; i <= n; i++)
if (arr[i] > mx)
mx = arr[i];
return mx;
}
void countSort(int n, int exp)
{
int output[n+10];
int i, count[10] = {0};
for (i = 1; i <= n; i++)
count[ (arr[i]/exp)%10 ]++;
for (i = 1; i <= 9; i++)
count[i] += count[i - 1];
for (i = n; i >= 1; i--)
{
output[count[ (arr[i]/exp)%10 ]] = arr[i];
count[ (arr[i]/exp)%10 ]--;
}
for (i = 1; i <= n; i++)
arr[i] = output[i];
}
void radixsort(int n)
{
int m = getMax(n);
for (int exp = 1; m/exp > 0; exp *= 10)
countSort(n, exp);
}
int main()
{
int a,b,c;
cin>>n>>a>>b>>c;
arr[1] = b;
for(int i = 2; i <= n; i ++)
arr[i] = ((long long)(a * arr[i-1])%c+ b) % c;
radixsort(n);
int pos=1;
bool ok=0;
while(ok==0)
{
cout<<arr[pos]<<" ";
pos+=10;
if(pos>n)
ok=1;
}
return 0;
}
///100 12 38 123