Cod sursa(job #2417377)

Utilizator Andrei2000Andrei Mihailescu Andrei2000 Data 29 aprilie 2019 17:13:37
Problema Radix Sort Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.74 kb
#include <bits/stdc++.h>

using namespace std;

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

const int nmax=10000005;

int *v, *t;
int n;

void sortbyte(int i){
    int cnt[255],nr[255];
    memset(cnt,0,sizeof cnt);
    for(int j=1;j<=n;++j){
        int d=(v[j]>>(8*i))&0xff;
        cnt[d]++;
    }
    nr[0]=1;
    for(int j=1;j<=255;++j)
        nr[j]=nr[j-1]+cnt[j-1];
    for(int j=1;j<=n;++j)
        t[nr[(v[j]>>(8*i))&0xff]++]=v[j];
    int *temp=v;
    v=t;
    t=temp;
}

void radixsort(){
    for(int i=0;i<4;++i)
        sortbyte(i);
}

int main()
{
    int a,b,c,prev=0;
    v=new int[10000005];
    t=new int[10000005];
    fin>>n>>a>>b>>c;
    for(int i=1;i<=n;++i)
        v[i]=(prev=(a*1LL*prev+b)%c);
    for(int i=1;i<=n;++i)
        fin>>v[i];
    radixsort();
    for(int i=1;i<=n;++i)
        if(i%10==1)
            fout<<v[i]<<' ';
    return 0;
}


/*for(int i=0;i<=255;++i){
        while(!rs[0][i].empty()){
            int e=rs[0][i].front();
            rs[1][(e & 0x0000ff00)>>8].push_back(e);
            rs[0][i].pop_front();
        }
    }
    for(int i=0;i<=255;++i){
        while(!rs[1][i].empty()){
            int e=rs[1][i].front();
            rs[0][(e & 0x00ff0000)>>16].push_back(e);
            rs[1][i].pop_front();
        }
    }
    for(int i=0;i<=255;++i){
        while(!rs[0][i].empty()){
            int e=rs[0][i].front();
            rs[1][(e & 0xff000000)>>24].push_back(e);
            rs[0][i].pop_front();
        }
    }
    for(int i=0;i<=255;++i){
        while(!rs[1][i].empty()){
            ++k;
            if(k%10==1)
                fout<<rs[1][i].front()<<' ';
            rs[1][i].pop_front();
        }
    }*/