Cod sursa(job #1302042)

Utilizator bence21Bako Bence bence21 Data 26 decembrie 2014 16:12:07
Problema Radix Sort Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.79 kb
#include<fstream>
long da[10],db[10];
using namespace std;
int main()
{
    ifstream f("radixsort.in");
    ofstream g("radixsort.out");
    long e,v,a[10][20001],b[10][20001];
    long i,n,A,B,c,max=-1,h=10,h2=1,y;
    short x;
    bool kov=1;
    f>>n>>A>>B>>c;
    e=B;
    x=B%10;
    a[x][da[x]++]=B;
    for(i=2;i<=n;i++)
    {
        v=(A*e+B)%c;
        x=v%10;
        a[x][da[x]++]=v;
        e=v;
        if(max<v)
            max=v;
    }
    while(max>9)
    {
        h*=10;
        h2*=10;
        if(kov)
        {
            for(i=0;i<10;i++)
            {
                for(long j=0;j<da[i];j++)
                {
                    x=a[i][j]%h;
                    x=x/h2;
                    b[x][db[x]++]=a[i][j];
                }
                da[i]=0;
            }
            kov=0;
        }
        else
        {
            for(i=0;i<10;i++)
            {
                for(long j=0;j<db[i];j++)
                {
                    x=b[i][j]%h;
                    x=x/h2;
                    a[x][da[x]++]=b[i][j];
                }
                db[i]=0;
            }
            kov=1;
        }
        max/=10;
    }
    max=0;
    y=0;
    h*=10;
    h2*=10;
    if(kov)
        for(i=0;i<10;i++)
        {
            for(long j=0;j<da[i];j++)
                if(max==y+j)
                {
                    g<<a[i][j]<<" ";
                    max+=10;
                }
            y+=da[i];
        }
    else
        for(i=0;i<10;i++)
        {
            for(long j=0;j<db[i];j++)
                if(max==y+j)
                {
                    g<<b[i][j]<<" ";
                    max+=10;
                }
            y+=db[i];
        }
    f.close();
    g.close();
    return 0;
}