Cod sursa(job #1656780)

Utilizator avaspAva Spataru avasp Data 19 martie 2016 19:38:23
Problema Radix Sort Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<cstdio>
#include<vector>
using namespace std;

struct numar{int nr, biti;};
numar v[10000001];

vector<numar>vc[256];
int n,a,b,c,sh,cate,p8;
int main(){
    freopen("radixsort.in","r",stdin);
    freopen("radixsort.out","w",stdout);
    scanf("%d%d%d%d",&n,&a,&b,&c);
    v[1].nr=b;
    for(int i=2;i<=n;i++){
        v[i].nr=(a* v[i-1].nr + b)%c;
    }
    sh=255;
    p8=1;
    for(int q=1;q<=4;q++){
        for(int i=1;i<=n;i++){
            if(sh==255)
                v[i].biti=v[i].nr&sh;
            else
                v[i].biti=(v[i].nr&sh)>>p8;
            vc[v[i].biti].push_back(v[i]);
        }
        cate=0;
        for(int i=0;i<=255;i++)
            while(vc[i].size()>0){
                v[++cate]=vc[i].back();
                vc[i].pop_back();
            }
        //
        sh=sh<<8;
        p8+=8;
    }
    for(int i=n;i>=1;i-=10)
        printf("%d ",v[i].nr);
    return 0;
}