Cod sursa(job #3179153)

Utilizator Warrior.exeZgorcea Mihai-Alexandru Warrior.exe Data 3 decembrie 2023 09:41:25
Problema Radix Sort Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <cstring>
#include <fstream>
#include <iostream>
using namespace std;

#define rad 0xFF
#define dimensiune 8
#define bits sizeof(sir[0])
#define get_byte(x) ((x>>(byte * 8))&rad)
int num, sir[10000001];
void sort(int A[],int B[],int byte) {
    int count[1<<dimensiune];
    int ind[1<<dimensiune];
    memset(count,0,sizeof(count));
    for(int i=0;i<num;i++){
        ++count[get_byte(A[i])];
    }
    ind[0]=0;
    for(int i = 1; i < 1<<dimensiune; i ++){
        ind[i]=ind[i-1]+count[i-1];
    }
    for(int i = 0; i < num; i ++){
        B[ind[get_byte(A[i])]++]=A[i];
    }
}
void radis() {
    int*poin=new int[num];
    for(int i=0;i<bits;i++) {
        if(i % 2 == 0){
            sort(sir,poin,i);
        }
        else{
            sort(poin,sir,i);
        }
}
}
int main()
{
ifstream cin("radixsort.in");
ofstream cout("radixsort.out");
int a,b,c;
    cin>>num>>a>>b>>c;
    sir[0]=b%c;
    for(int i=1;i<num;i++){
        sir[i]=(1LL*a*sir[i-1]%c+b)%c;
    }
    radis();
 for(int i=0;i<num;i+=10){
        cout<< sir[i]<<" ";
 }
    return 0;
}