Cod sursa(job #2417237)

Utilizator Andrei2000Andrei Mihailescu Andrei2000 Data 29 aprilie 2019 12:16:47
Problema Radix Sort Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin ("radixsort.in");
ofstream fout ("radixsort.out");

deque<int> rs[2][256];

int main()
{
    int n,a,b,c,prev=0,k=0;
    fin>>n>>a>>b>>c;
    for(int i=1;i<=n;++i){
        rs[0][(prev=(a*prev+b)%c) & 0x000000ff].push_back( prev );
    }
    for(int i=0;i<=255;++i){
        while(!rs[0][i].empty()){
            int e=rs[0][i].front();
            rs[1][(e & 0x0000ff00)>>8].push_back(e);
            rs[0][i].pop_front();
        }
    }
    for(int i=0;i<=255;++i){
        while(!rs[1][i].empty()){
            int e=rs[1][i].front();
            rs[0][(e & 0x00ff0000)>>16].push_back(e);
            rs[1][i].pop_front();
        }
    }
    for(int i=0;i<=255;++i){
        while(!rs[0][i].empty()){
            int e=rs[0][i].front();
            rs[1][(e & 0xff000000)>>24].push_back(e);
            rs[0][i].pop_front();
        }
    }
    for(int i=0;i<=255;++i){
        while(!rs[1][i].empty()){
            ++k;
            if(k%10==1)
                fout<<rs[1][i].front()<<' ';
            rs[1][i].pop_front();
        }
    }
    return 0;
}