Cod sursa(job #45152)

Utilizator Bluedrop_demonPandia Gheorghe Bluedrop_demon Data 1 aprilie 2007 02:42:15
Problema Cutii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.01 kb
// Problema cutii

#include <stdio.h>
#define MAX      3501

long d[MAX][3];
int c[MAX];

int pozitie( int st, int dr )
{
    long piv = d[st][0]*d[st][1]*d[st][2];
    int L,l,h;
    int i=st-1, j = dr+1;
    do{
        do{ i++; }while( d[i][0]*d[i][1]*d[i][2] < piv );
        do{ j--; }while( d[j][0]*d[j][1]*d[j][2] > piv );
        if( i < j )
                {
                    L = d[i][0]; l = d[i][1]; h = d[i][2];
                    d[i][0] = d[j][0];
                    d[i][1] = d[j][1];
                    d[i][2] = d[j][2];
                    d[j][0] = L; d[j][1] = l; d[j][2] = h;
                }
                
    }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 );
     return 0;
}


int main()
{
    int n, t, i, j, max;
    freopen( "cutii.in", "rt", stdin );
             scanf( "%d %d", &n, &t );    
    freopen( "cutii.out", "wt", stdout );
             while( t )
                    {
                      t--;
                      for( i=1; i<=n; i++ ) 
                           scanf( "%ld %ld %ld", &d[i][0], &d[i][1], &d[i][2] );
                      qs( 1, n );
                      max = 1;
                      c[1] = 1;
                      for( i=2; i<=n; i++ )
                           {
                           c[i] = 1;
                           for( j=1; j<i; j++ )
                           if( ( d[j][0] < d[i][0] ) && ( d[j][1] < d[i][1] ) && ( d[j][2] < d[i][2] ) )
                               if( c[j]+1 > c[i] ) 
                               {
                                         c[i] = c[j]+1;
                                         if( c[i] > max ) max = c[i];
                               }
                           }
                      printf( "%d\n", max );                                                 
                    }
    fclose( stdin );
    fclose( stdout );
    return 0;
}