Cod sursa(job #514590)

Utilizator Gaby_mMititelu Gabriel Gaby_m Data 19 decembrie 2010 11:36:12
Problema Cutii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<stdio.h>
#include<algorithm>
#include<vector>

using namespace std;

struct cutie{
	int x;
	int y;
	int z;
};

bool compareFunction(cutie A, cutie B) {
	if (A.x != B.x) return (A.x < B.x);
		else if (A.y != B.y) return (A.y < B.y);
			else return (A.z <= B.z);	
}

int N,T;
vector<cutie> v;

void readData() {
	int i;	
	for (i = 0; i < N; i++) {
		scanf("%d %d %d\n", &v[i].x, &v[i].y, &v[i].z);
		printf("%d %d %d\n", v[i].x, v[i].y, v[i].z);
		
	}
}

int solve(){
	int length[3501];
	int i,j,max;
	int result = 0;
	length[0] = 1;
	cutie aux1,aux2;
	
	for (i = 1; i < N; i++){
		max = 0;
		aux1 = v[i];
		for (j = 0; j < i; j++){
			aux2 = v[j];
			if ((aux1.x > aux2.x)&&(aux1.y > aux2.y) && (aux1.z > aux2.z) && (length[j] > max)){
				max = length[j];
			}
		}
		length[i] = max + 1;
		if (result < max + 1) result = max + 1;
	}	
	return result;	
}


void afisare() {
	int i;
	for (i = 0; i < N; i++) 
		printf("%d %d %d\n", v[i].x, v[i].y, v[i].z);
}

int main() {

	freopen("cutii.in","r",stdin);
	freopen("cutii.out","w",stdout);
	
	scanf("%d %d\n", &N, &T);
	
	int i,j;
	cutie aux;
	
	for (i = 0; i < T; i++){
		v.clear();
		for (j = 0; j < N; j++) {
			scanf("%d %d %d\n", &aux.x, &aux.y, &aux.z);
			v.push_back(aux);			
		}
		sort (v.begin(), v.end(), compareFunction);		
		printf("%d\n",solve());
	}
	
	return 0;
}