Cod sursa(job #1464552)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 23 iulie 2015 21:02:10
Problema Radix Sort Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include<cstdio>
#include<cstring>
using namespace std;
int v[2][10000010],nr[260];
int main(){
    freopen("radixsort.in","r",stdin);
    freopen("radixsort.out","w",stdout);
    int n,a,b,c,i,j,p=0;
    scanf("%d%d%d%d",&n,&a,&b,&c);
    v[p][1]=b;
    for(i=2;i<=n;i++)
        v[p][i]=((1LL*a*v[p][i-1])%c+b)%c;
    for(j=0;j<32;j+=8){
        memset(nr,0,sizeof(nr));
        for(i=1;i<=n;i++)
            nr[(v[p][i]>>j)&255]++;
        for(i=1;i<=255;i++)
            nr[i]+=nr[i-1];
        for(i=n;i>=1;i--){
            v[p^1][nr[(v[p][i]>>j)&255]]=v[p][i];
            nr[(v[p][i]>>j)&255]--;
        }
        p^=1;
    }
    for(i=1;i<=n;i+=10)
        printf("%d ",v[p][i]);
    return 0;
}