Cod sursa(job #1295012)

Utilizator TeodorescuStefanEduardTeodorescu Stefan Eduard TeodorescuStefanEduard Data 18 decembrie 2014 17:40:37
Problema Radix Sort Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.58 kb
#include <iostream>
#include <fstream>
using namespace std;
fstream in("radixsort.in",ios::in);
fstream out("radixsort.out",ios::out);

struct nod
{
    int info;
    nod *next;
};

int main()
{
    int a[1000000],i,N,A,B,C,mod=10,div=1,flag,j,x,max,div1=1;
    nod v[15],*p,*q[15],*z;
    in>>N>>A>>B>>C;
    in.close();
    a[1]=B;
    max=a[1];
    for(i=2;i<=N;i++)
    {
        a[i]=(A*a[i-1]+B)%C;
        if(a[i]>max)
            max=a[i];
    }
    while(max>0)
    {
        div1=div1*10;
        max=max/10;
    }
    do{
           flag=1;
           for(i=0;i<10;i++)
           {
                v[i].next=0;
                q[i]=&v[i];
           }
            for(j=1;j<=N;j++)
            {
                x=a[j];
                x=x/div;
                x=x%mod;
                p=new nod;
                p->info=a[j];
                q[x]->next=p;
                p->next=0;
                q[x]=p;
            }
            j=1;
            for(i=0;i<10;i++)
                {
                    p=v[i].next;
                    while(p!=0)
                    {
                        a[j++]=p->info;
                        p=p->next;
                    }
                }
        for(i=0;i<10;i++)
        {
            if(v[i].next!=0)
            {
                z=v[i].next;
                p=z->next;
            }
            while(z->next!=0)
            {
                delete z;
                z=p;
                p=p->next;
            }
        }
        div=div*10;




    }while(div<div1);
    for(i=1;i<=N;i=i+10)
        out<<a[i]<<" ";
    out.close();


return 0;
}