Cod sursa(job #2036016)

Utilizator Valentin0709Datcu George Valentin Valentin0709 Data 10 octombrie 2017 09:59:20
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<iostream>
#include<limits.h>
#include<stdio.h>
using namespace std;

FILE*f=fopen("radixsort.in","r");
FILE*g=fopen("radixsort.out","w");

int n,v[10000005],s[10000005],i,a,b,c;

void radix(int v[], int n) {
    int c[11],p,i,mx=-LONG_MAX;
    for(i=1;i<=n;i++)
        if(v[i]>mx) mx=v[i];
    for(p=1;mx*10/p>0;p*=10) {
        for(i=0;i<=10;i++) c[i]=0;
        for(i=1;i<=n;i++) c[(v[i]/p)%10]++;
        for(i=1;i<10;i++) c[i]+=c[i-1];
        for(i=n;i>=1;i--) {
            s[c[(v[i]/p)%10]]=v[i];
            c[(v[i]/p)%10]--;
        }
        for(i=1;i<=n;i++) v[i]=s[i];
    }
}

int main() {

    fscanf(f,"%d%d%d%d",&n,&a,&b,&c);
    v[1]=b;
    for(i=2;i<=n;i++) v[i]=(a*v[i-1]+b)%c;
    radix(v,n);
    for(i=1;i<=n;i+=10) fprintf(g,"%d ",v[i] );

    fclose(f); fclose(g);

    return 0;
}