Cod sursa(job #1976532)

Utilizator robx12lnLinca Robert robx12ln Data 3 mai 2017 17:04:41
Problema Cutii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include<cstdio>
#include<algorithm>
using namespace std;
FILE * fin = fopen("cutii.in","r");
FILE * fout = fopen("cutii.out","w");
int n, T, poz[3505], D[3505], sol;
struct cutie{
    int X;
    int Y;
    int Z;
} v[3505];
inline bool cmp( int i, int j ){
    if( v[i].X > v[j].X )
        return false;
    else{

        if( v[i].X == v[j].X ){

            if( v[i].Y > v[j].Y )
                return false;
            else{

                if( v[i].Y == v[j].Y ){

                    if( v[i].Z > v[j].Z )
                        return false;
                    else
                        return true;

                }else
                    return true;

            }

        }else
            return true;

    }
}
inline bool ok( int i, int j ){// j sa intre in i
    if( v[j].X < v[i].X && v[j].Y < v[i].Y && v[j].Z < v[i].Z )
        return true;
    return false;
}
int main(){
    fscanf( fin, "%d%d", &n, &T );
    for( int t = 1; t <= T; t++ ){
        for( int i = 1; i <= n; i++ ){
            fscanf( fin, "%d%d%d", &v[i].X, &v[i].Y, &v[i].Z );
            poz[i] = i;
        }
        sort( poz + 1, poz + n + 1, cmp );
        sol = 0;
        for( int i = 1; i <= n; i++ ){
            D[i] = 1;
            for( int j = 1; j < i; j++ ){
                if( ok( poz[i], poz[j] ) == true && D[i] < D[j] + 1 )
                    D[i] = D[j] + 1;
            }
            sol = max( sol, D[i] );
        }
        fprintf( fout, "%d\n", sol );
    }
    return 0;
}