Cod sursa(job #3292908)

Utilizator Sorin_GabrielGabara Sorin Gabriel Sorin_Gabriel Data 9 aprilie 2025 19:01:27
Problema Radix Sort Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <iostream>
#include <bits/stdc++.h>
#define VMAX 10000005
#define INF 2147000000
using namespace std;
ifstream fin ("radixsort.in");
ofstream fout ("radixsort.out");

int numere[VMAX];
int aux_[VMAX];
int frcv[10];
int stanga[10];

long long int a,b,c;

signed main()
{
    long long int n,m,i,j,k,t,q,nr,p;
    fin>>n>>a>>b>>c;
    nr=0;
    for(i=1;i<=n;i++)
    {
        nr=(a*nr+b)%c;
        numere[i]=nr;
    }

    for(p=1;1;p*=10)
    {
		for (i = 0; i < 10; ++i)
			frcv[i] = 0;

        for(j=1;j<=n;j++)
        {
            frcv[(numere[j]/p)%10]++;
        }

        if(frcv[0]==n)
            break;

        stanga[0]=1;
        for(i=1;i<10;i++)
            stanga[i]=stanga[i-1]+frcv[i-1];

        for(j=1;j<=n;j++)
        {
            aux_[stanga[(numere[j]/p)%10]++]=numere[j];
            //un numar din grupa j va avea stanga[j] numere in fata sa, iar fara cifra sata
            // ele sunt sortate crescator, deci in ordinea aparitiei, ele vor ocupa stanga[j], stanga[j+1]
            // deci putem face stanga[j]++ pentru a ajunge la acea pozitie
        }
        swap(aux_,numere);
    }

    for(i=1;i<=n;i+=10)
        fout<<numere[i]<<' ';
    fout<<'\n';

    return 0;
}