Cod sursa(job #1012981)

Utilizator Teodor94Teodor Plop Teodor94 Data 20 octombrie 2013 00:10:05
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <cstdio>
#include <cassert>
#include <algorithm>
#include <vector>

using namespace std;

#define MAX_N 500000
#define MAX_POWER 1000000000

int n, v[MAX_N];
int LIMIT;

void read( FILE *fin ) {
    assert( fscanf( fin, "%d", &n ) == 1 );
    for ( int i = 0; i < n; ++i ) {
        assert( fscanf( fin, "%d", &v[i] ) == 1 );

        LIMIT = max( LIMIT, v[i] );
    }
}

void write( FILE *fout ) {
    for ( int i = 0; i < n; ++i )
        fprintf( fout, "%d ", v[i] );
}

int main() {
    FILE *fin, *fout;

    fin = fopen( "algsort.in", "r" );
    read( fin );
    fclose( fin );
    
    vector < int > a[10];
    
    LIMIT = min( LIMIT, MAX_POWER );
    for ( int power10 = 1; power10 <= LIMIT; power10 *= 10 ) {
        for ( int i = 0; i < n; ++i )
            a[ v[i] / power10 % 10 ].push_back( v[i] );

        int curr_pos = 0;
        for ( int i = 0; i < 10; ++i ) {
            for ( vector < int > :: iterator it = a[i].begin(); it != a[i].end(); ++it ) {
                v[curr_pos] = *it;
                ++curr_pos;
            }

            a[i].clear();
        }

        if ( power10 > MAX_POWER / 10 )
            break;
    }

    fout = fopen( "algsort.out", "w" );
    write( fout );
    fclose( fout );
}