Cod sursa(job #1564833)

Utilizator ndani17Daniel Nohai ndani17 Data 9 ianuarie 2016 23:14:38
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],x[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++)
        {
            x[i]=v[i];
            contor[ (x[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[(x[i]>>step)&(bitmax-1)]++ ]=x[i];
    }
}

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

}

int main ()
{
    citire();
    solve();
    afis();
    return 0;
}