Cod sursa(job #430287)

Utilizator paul_gabryelPaul Buda paul_gabryel Data 30 martie 2010 21:23:21
Problema Cutii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<fstream>
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
int vx[3501],vy[3501],vz[3501],v[3501],n,t;
void aranjeaza (int i)
{
	int aux=0;
	for(int j=1;j<=n&&aux==0;++j)
		if(v[i]==vx[j]*vy[j]*vz[j]){
			aux=vx[i];
			vx[i]=vx[j];
			vx[j]=aux;
			aux=vy[i];
			vy[i]=vy[j];
			vy[j]=aux;
			aux=vz[i];
			vz[i]=vz[j];
			vz[j]=aux;
		}
}
int cauta(int i)
{
	int c=1,x=vx[i],y=vy[i],z=vz[i],aux=v[i];
	for(int j=i-1;j>=1;--j)
		if(aux>v[j])
			if(vx[j]<x&&vy[j]<y&&vz[j]<z){
			++c;
			
			aux=v[j];
			x=vx[j];
			y=vy[j];
			z=vz[j];
			}
		
	return c;
}
int verificare (int i)
{
	if(v[n]>v[i])
		if(vx[n]>vx[i]&&vy[n]>vy[i]&&vz[n]>vz[i])
			return 1;
	return 0;
}
int main ()
{
	ifstream fin ("cutii.in");
	freopen("cutii.out","w",stdout);
	fin>>n>>t;
	
	for(int k=1;k<=t;++k){
	for(int i=1;i<=n;++i){
		fin>>vx[i]>>vy[i]>>vz[i];
	v[i]=vx[i]*vy[i]*vz[i];}
	
	sort(v+1,v+n+1);
	for(int i=1;i<=n;++i)
		aranjeaza(i);
	int max=1;
	for(int i=n;i>1;--i){
		int c=cauta(i);
		c+=verificare(i);
		if(c>max)
			max=c;
	}
	printf("%d\n",max);
	}
	fin.close();
return 0;}