Cod sursa(job #1733699)

Utilizator Kln1000Ciobanu Bogdan Kln1000 Data 25 iulie 2016 14:12:38
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.84 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream f ("radixsort.in");
ofstream t ("radixsort.out");

vector <int_fast32_t> v0,v1,v2,v3,v4,v5,v6,v7,v8,v9,v;
long n;

void flush(){
v0.resize(0);
v1.resize(0);
v2.resize(0);
v3.resize(0);
v4.resize(0);
v5.resize(0);
v6.resize(0);
v7.resize(0);
v8.resize(0);
v9.resize(0);}

void emplace(){v.resize(0);
for (unsigned long i=0;i<v0.size();++i)
v.push_back(v0[i]);
for (unsigned long i=0;i<v1.size();++i)
v.push_back(v1[i]);
for (unsigned long i=0;i<v2.size();++i)
v.push_back(v2[i]);
for (unsigned long i=0;i<v3.size();++i)
v.push_back(v3[i]);
for (unsigned long i=0;i<v4.size();++i)
v.push_back(v4[i]);
for (unsigned long i=0;i<v5.size();++i)
v.push_back(v5[i]);
for (unsigned long i=0;i<v6.size();++i)
v.push_back(v6[i]);
for (unsigned long i=0;i<v7.size();++i)
v.push_back(v7[i]);
for (unsigned long i=0;i<v8.size();++i)
v.push_back(v8[i]);
for (unsigned long i=0;i<v9.size();++i)
v.push_back(v9[i]);
}

void alloc(int_fast32_t x,int_fast32_t determ){
switch ((x%determ)/(determ/10)){
case 0:{v0.push_back(x);break;}
case 1:{v1.push_back(x);break;}
case 2:{v2.push_back(x);break;}
case 3:{v3.push_back(x);break;}
case 4:{v4.push_back(x);break;}
case 5:{v5.push_back(x);break;}
case 6:{v6.push_back(x);break;}
case 7:{v7.push_back(x);break;}
case 8:{v8.push_back(x);break;}
case 9:{v9.push_back(x);break;}
}}

void generatenum(int a,int b,int c){
v.push_back(b);
for (int i=1;i<n;++i)
v.push_back((a*v[i-1]+b)%c);
}

inline void show(){
for (int i=0;i<n;i+=10)
t<<v[i]<<" ";
}

void read(){int a,b,c;
f>>n>>a>>b>>c;
generatenum(a,b,c);}


void rasort(){int det=10;
for (int i=0;i<11;++i,det*=10){
for (int j=0;j<n;++j)
alloc(v[j],det);
emplace();
flush();}
}

int main()
{read();
rasort();
show();
return 0;
}