Cod sursa(job #2633978)

Utilizator RaduQQTCucuta Radu RaduQQT Data 9 iulie 2020 14:45:50
Problema Radix Sort Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h> 
#include <stdlib.h>


#define ll long long
ll n;
ll arr[10000010];

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

void countSort(ll exp)
{
    ll* output = (ll*)malloc((n + 2) * sizeof(ll));
    ll i, count[10] = { 0 };


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

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

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


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

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

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

void print()
{
    for (ll i = 0; i < n; i += 10)
        printf("%lld ", arr[i]);
}

int main()
{
    freopen("radixsort.in", "r", stdin);
    freopen("radixsort.out", "w", stdout);
    ll a, b, c;
    scanf("%d%d%d%d", &n, &a, &b, &c);

    arr[0] = b;
    for (ll i = 1; i < n; i++)
    {
        arr[i] = ((a*arr[i - 1]) % c + b) % c;
    }

    radixsort();
    print();
}