Pagini recente » Cod sursa (job #43757) | Cod sursa (job #1528409) | Cod sursa (job #2404474) | Monitorul de evaluare | Cod sursa (job #2648806)
#include <iostream>
#include <fstream>
#include <vector>
#define LL long long
using namespace std;
const long MAXN = 1e7+1;
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
vector<int> v, v2;
LL n;
void count_sort(int pow){
int i, count[10] = {0};
for (i = 0; i < n; i++)
count[(v[i]/pow)%10 ]++;
for (i = 1; i < 10; i++)
count[i] += count[i - 1];
for (i = n - 1; i >= 0; i--){
v2[count[(v[i]/pow)%10 ]-1] = v[i];
count[(v[i]/pow)%10]--;
}
for (i = 0; i < n; i++)
v[i] = v2[i];
}
void radix_sort(LL maxi){
for(int pow = 1;maxi/pow>0;pow*=10)
count_sort(pow);
}
LL generate_num(LL a, LL b, LL c){
v.push_back(b);
v2.push_back(0);
LL maxi = v[0];
for(int i=1;i<n;i++){
v.push_back((a*v[i-1]+b)%c);
v2.push_back(0);
if(v[i]>maxi) maxi = v[i];
}
return maxi;
}
int main() {
LL a, b, c, maxi;
fin>>n>>a>>b>>c;
maxi = generate_num(a, b, c);
radix_sort(maxi);
for(int i=0;i<n;i+=10)
fout<<v[i]<<' ';
return 0;
}