Cod sursa(job #1557788)

Utilizator dobrebogdanDobre Bogdan Mihai dobrebogdan Data 28 decembrie 2015 12:01:51
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<cstdio>
#include<iostream>
using namespace std;
unsigned ve[10000005],v2[10000005],p2[35];
int main()
{
    freopen("radixsort.in","r",stdin);
    freopen("radixsort.out","w",stdout);
    long long int a,b,c,d;
    int i,n,st,dr,l,j;
    dr=n;
    cin>>n>>a>>b>>c;
    ve[1]=b;
    d=0;
    for(i=2;i<=n;i++)
    {
        d=(d*a+b)%c;
        ve[i]=d;
    }
    p2[0]=1;
    for(i=1;i<=30;i++)
        p2[i]=p2[i-1]*2;
        l=1;
    for(i=0;i<=30;i++)
    {
        st=dr=l;
        for(j=l;j<=n;j++)
            if(ve[j]<p2[i])
        {
            v2[st]=ve[j];
            st++;
        }
        dr=st;
         for(j=l;j<=n;j++)
            if((ve[j]>=p2[i]) && !(ve[j] & p2[i]))
        {
            v2[dr]=ve[j];
            dr++;
        }
            for(j=l;j<=n;j++)
            if((ve[j]>=p2[i]) && (ve[j] & p2[i]))
        {
            v2[dr]=ve[j];
            dr++;
        }
        for(j=l;j<=n;j++)
            ve[j]=v2[j];
            l=st;
    }
    for(i=1;i<=n;i=i+10)
        printf("%u ",ve[i]);
    return 0;
}