Cod sursa(job #1317856)

Utilizator retrogradLucian Bicsi retrograd Data 15 ianuarie 2015 11:59:42
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;

ifstream fin("radixsort.in");
ofstream fout("radixsort.out");

#define MAXN 10000001
#define MOD 215000

struct nod {
    long val;
    nod *leg;
    nod(long v) {
        val = v;
        leg = NULL;
    }
};
typedef nod* pnod;

long n;
long long cur, a, b, c;
long V[MAXN];
pnod B[257];
pnod sf[257];
vector<long>::iterator it;

int main() {

    long i, nr, ind;
    fin>>n>>a>>b>>c;
    cur = b;
    for(i=1; i<=n; i++, cur = (cur*a+b)%c) {
        V[i] = cur;
    }
    pnod last;
    for(c = 0; c<=24; c = c + 8) {
        for(i=1; i<=n; i++) {
            nr = (V[i] >> c) & ( (1<<8) - 1 );
            if(B[nr] == NULL) {
                B[nr] = new nod(V[i]);
                sf[nr] = B[nr];
                continue;
            }
            sf[nr] -> leg = new nod(V[i]);
            sf[nr] = sf[nr] -> leg;
        }
        ind = 0;
        last = NULL;
        for(i=0; i<256; i++) {
            for(pnod p=B[i]; p; last = p,p =  p->leg, delete last) {
                V[++ind] = p->val;
            }
            B[i] = NULL;
            sf[i] = NULL;
        }

    }
    for(long i=1; i<=n; i+=10) {
        fout<<V[i]<<" ";
    }

}