Cod sursa(job #2773771)

Utilizator roberttrutaTruta Robert roberttruta Data 8 septembrie 2021 17:10:51
Problema Radix Sort Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
//sorteaza dupa fiecare cifra a ficarui numar
// complexitate O(kn), k=nr max de cifre al unui nr
#include <bits/stdc++.h>

using namespace std;
ifstream f("radixsort.in");
ofstream g("radixsort.out");

stack <int> backet[256];
int v[10000000];

int main()
{
    int n,a,b,c,i,j,t,poz;

    f>>n>>a>>b>>c;
    //generam numerele (nu ni-se dau)
    v[0]=b;
    for(i=1;i<n;i++)
        v[i]=(1LL*a*v[i-1]+b)%c;

    int pow=0;
    for(i=1;i<=4;i++)//impartim numerele in cate 4 bucati de cate 8 biti
    {
        for(j=n-1;j>=0;j--)
        {
            poz=(v[j]>>pow)&255;
            backet[poz].push(v[j]);
        }

        j=0;
        for(t=0;t<=255;t++)//acum nr sunt sortate pentru primii i biti(de la coada)
            while(!backet[t].empty())
        {
            v[j++]=backet[t].top();
            backet[t].pop();
        }
        pow+=8;
    }
    for(i=0;i<n;i+=10)
        g<<v[i]<<' ';

//Obs: Se poate face si cu 10 backeturi pentru fiecare cifra in loc de 4 bytes.
    return 0;
}