Cod sursa(job #3227225)

Utilizator catalinpuricoicatalinpuricoi catalinpuricoi Data 28 aprilie 2024 14:54:24
Problema Radix Sort Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>

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

int arr[10000010],count1[10],output[10000010], n, i, A, B, C;

int getMax()
{
    int mx = arr[0];
    for (int i = 1; i < n; i++)
        if (arr[i] > mx)
            mx = arr[i];
    return mx;
}

void countSort(int exp)
{

    for (i = 0; i < 10; i++)
        count1[i] = 0;

    for (i = 0; i < n; i++)
        count1[(arr[i] / exp) % 10]++;

    for (i = 1; i < 10; i++)
        count1[i] += count1[i - 1];

    for (i = n - 1; i >= 0; i--)
    {
        output[count1[(arr[i] / exp) % 10] - 1] = arr[i];
        count1[(arr[i] / exp) % 10]--;
    }

    for (i = 0; i < n; i++)
        arr[i] = output[i];
}

void radixsort()
{
    int m = getMax();

    for (int exp = 1; m / exp > 0; exp *= 10)
        countSort(exp);
}


int main()
{
    f>>n>>A>>B>>C;
    arr[0]=B;
    for(int i = 1; i < n; i++)
        arr[i] = (A * arr[i-1] + B) % C;

    radixsort();
    for (int i = 0; i <n; i+=10)
        g<<arr[i]<<' ';
    return 0;
}