Cod sursa(job #3259359)

Utilizator Gabriel_DaescuDaescu Gabriel Florin Gabriel_Daescu Data 25 noiembrie 2024 22:41:46
Problema Radix Sort Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#include <algorithm>
#define NMAX 10000002
using namespace std;
ifstream  fin("radixsort.in");
ofstream fout("radixsort.out");
int v[NMAX],rez[NMAX],vmax;
long long N,A,B,C,X;

void sortare(int poz)
{
    int cifre[11];

    for(int i=0; i<=10; i++)
    {
        cifre[i]=0;
    }

    for(int i=1; i<=N; i++)
    {
        cifre[(v[i]/poz)%10]++;
    }

    for(int i=1; i<10; i++)
    {
        cifre[i]+=cifre[i-1];
    }

    for(int i=N; i>=1; i--)
    {
        rez[cifre[(v[i]/poz)%10]]=v[i];
        cifre[(v[i]/poz)%10]--;
    }

    for(int i=1; i<=N; i++)
    {
        v[i]=rez[i];
    }

}

void afisare()
{
    for(int i=1; i<=N; i=i+10)
    {
        fout<< v[i] << " ";
    }
    fout<< "\n";
}

int main()
{
    fin>>N>>A>>B>>C;

    X=B;
    v[1]=X;
    vmax=v[1];

    for(int i=2; i<=N; i++)
    {
        X=(A*X+B)%C;
        v[i]=X;
        vmax=max(vmax,v[i]);
    }

    for(int i=1; vmax/i>0; i=i*10)
    {
        sortare(i);
    }

    afisare();

    return 0;
}