Cod sursa(job #1128414)

Utilizator oprea1si2si3Oprea Sebastian oprea1si2si3 Data 27 februarie 2014 16:59:09
Problema Radix Sort Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
using namespace std;

int N,v[10100100],aux[10100100],contor[260],index[260],bitmax=256;

void citire() {

    ifstream in("radixsort.in");
    int i,a,b,c;
    in>>N>>a>>b>>c;
    v[1]=b;
    for(i=2;i<=N;i++)
        v[i]=(1LL*v[i-1]*a+b)%c;
    in.close();

}

void solve() {

    int i,step;
    for(step=0;step<=24;step+=8) {

        for(i=0;i<bitmax;i++)
            contor[i]=0;

        for(i=1;i<=N;i++) {
            aux[i]=v[i];
            contor[ (aux[i]>>step) & (bitmax-1)]++;
        }

        index[0]=1;
        for(i=1;i<bitmax;i++)
            index[i]=index[i-1]+contor[i-1];

        for(i=1;i<=N;i++)
            v[ index[(aux[i]>>step)&(bitmax-1)]++ ]=aux[i];
    }
}

void afisare() {

    ofstream out("radixsort.out");
    int i;
    for(i=1;i<=N;i+=10)
        out<<v[i]<<' ';
    out<<'\n';
    out.close();

}

int main () {

    citire();
    solve();
    afisare();
    return 0;

}