Cod sursa(job #1216176)

Utilizator cosmo0093Raduta Cosmin cosmo0093 Data 3 august 2014 16:39:57
Problema Invers modular Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>

int index[256];
int counter[256];

int getInd(int a, int bytes)
{
    return (a >> (bytes * 8)) & 255;
}

void doStuff(int *nArr, int *nBarr, int bytes, int nV)
{
    for (int i = 0; i < 256; i++)
    {
        counter[i] = 0;
    }
    for (int i = 0; i < nV; i++)
    {
        ++counter[getInd(nArr[i], bytes)];
    }
    index[0] = 0;
    for (int i = 1; i < 256; i++)
    {
        index[i] = index[i - 1] + counter[i - 1];
    }
    for (int i = 0; i < nV; i++)
    {
        nBarr[index[getInd(nArr[i], bytes)]++] = nArr[i];
    }
    for (int i = 0; i < nV; i++)
    {
        nArr[i] = nBarr[i];
    }
}

void sort(int *nArr, int nV)
{
    int *nBarr = new int[nV];
    for (int i = 0; i < (int)sizeof(int); i++)
    {
        doStuff(nArr, nBarr, i, nV);
    }
}

int main()
{
    std::ifstream in("radixsort.in");
    std::ofstream out("radixsort.out");
    int nV, a, b, c;
    in >> nV >> a >> b >> c;
    in.close();
    int *nArr = new int[nV];
    nArr[0] = b % c;
    for (int i = 1; i < nV; i++)
    {
        nArr[i] = (1LL * a * nArr[i - 1] % c + b) % c;
    }
    sort(nArr, nV);
    for(int i = 0; i < nV; i += 10)
    {
        out << nArr[i]<< ' ';
    }
    out.close();
    return 0;
}