Cod sursa(job #48832)

Utilizator Bluedrop_demonPandia Gheorghe Bluedrop_demon Data 5 aprilie 2007 08:56:57
Problema Ghiozdan Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
// Problema ghiozdan...
// Se face cu o sortare banala ???

#include <stdio.h>
#define MAX       20001

int obj[MAX];
int pus[MAX];

int pozitie( int st, int dr )
{
    int piv = obj[st];
    int aux;
    int i = st-1, j = dr+1;
    do{
        do{ i++; }while( obj[i] > piv );
        do{ j--; }while( obj[j] < piv );
        if( i < j )
            {
                aux = obj[i];
                obj[i] = obj[j];
                obj[j] = aux;
            }
    }while( i <  j);
    return j;
}

int qs( int st, int dr )
{
    if( st == dr ) return 0;
    int m = pozitie( st, dr );
    qs( st, m );
    qs( m+1, dr );
}

int main()
{
    freopen( "ghiozdan.in", "rt", stdin );
             int n, i;
             long g;
             scanf( "%d %ld", &n, &g );
             for( i=1; i<=n; i++ ) scanf( "%d", &obj[i] );
             qs( 1, n );
             
    fclose( stdin );
    
    int Nmin = 0;
    long Gmax = 0;
    for( i =1; i<=n; i++ )
         {
               if( Gmax + obj[i] <= g ) { Gmax += obj[i]; Nmin++; pus[Nmin] = obj[i]; }
               if( Gmax == g ) break;
         }
    
    freopen( "ghiozdan.out", "wt", stdout );
             printf( "%ld %d\n", Gmax, Nmin );
             for( i=1; i<=Nmin; i++ ) printf( "%d\n", pus[i] );
    fclose( stdout );    
    return 0;
}