Cod sursa(job #1313732)

Utilizator cipriancxFMI - gr143 Timofte Ciprian cipriancx Data 11 ianuarie 2015 00:11:16
Problema Radix Sort Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include<cstdio>
#include <cstdlib>
#include <queue>
using namespace std;

unsigned int rest1,rest2,rest3,rest4,v[10000002];
queue<unsigned int> coada[256];



unsigned int a,b,c,n;


void adauga(unsigned int nr, unsigned int poz)
{
coada[poz].push(nr);
}

void descarca()
{ int dimv=0;
    for(int i=0; i<256; i++)
        while(!coada[i].empty())
    {
        dimv++;
        v[dimv]=coada[i].front();
        coada[i].pop();
    }
}



int main()
{
    rest1=255;
    rest2=rest1<<8;
    rest3=rest2<<8;
    rest4=rest3<<8;



freopen("radixsort.in","r",stdin);
freopen("radixsort.out","w",stdout);


cin>>n>>a>>b>>c;



unsigned int anterior,curent;
anterior=b;

adauga(anterior,anterior&rest1);
for(int i=2; i<=n; i++)
{
    curent=(a*anterior+b)%c;
  adauga(curent,curent&rest1);
    anterior=curent;
}
descarca();

for(int i=1; i<=n; i++)
    adauga(v[i],v[i]&rest2);
    descarca();


for(int i=1; i<=n; i++)
    adauga(v[i],v[i]&rest3);
descarca();

for(int i=1; i<=n; i++)
    adauga(v[i],v[i]&rest4);
descarca();

for(int i=1; i<=n; i++)if(i%10 == 1)cout<<v[i]<<" ";


    return 0;
}