Cod sursa(job #309755)

Utilizator Andrei200Andrei200 Andrei200 Data 1 mai 2009 00:19:43
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <stdio.h>

long int gasit,i,j,n,m,l[3502],L[3502],h[3502],v[3502],x,ii;

void qsort(long ls, long r)   
{   
 long i,j,x,y;   
 i=ls;   
 j=r;   
 x=v[(ls+r)>>1];   
 do  
    {   
    while ((v[i]<x)&&(i<n)) ++i;   
    while ((x<v[j])&&(j>1)) --j;   
    if (i<=j)   
        {   
        y=v[i];   
        v[i]=v[j];   
        v[j]=y;   
		y=l[i];   
        l[i]=l[j];   
        l[j]=y;
        y=L[i];   
        L[i]=L[j];   
        L[j]=y;
        y=h[i];   
        h[i]=h[j];   
        h[j]=y;      		
        ++i;   
        --j;   
        }   
    }   
 while (i<=j);   
 if (ls<j) qsort(ls,j);   
 if (i<r) qsort(i,r);   
}   


int intra(long int i, long int j)
{
 long int gasit=1;
 if (l[i]>l[j] && L[i]>L[j] && h[i]>h[j])
   gasit=0;
 return gasit;
}

int main()
{
 FILE *g=fopen("cutii.out","w");
 FILE *f=fopen("cutii.in","r");
 fscanf(f,"%ld %ld",&n,&m);
 for (ii=1;ii<=m;ii++)
    {
 for (i=1;i<=n;i++)
    fscanf(f,"%ld %ld %ld",&l[i],&L[i],&h[i]);

 for (i=1;i<=n;i++)
    v[i]=l[i]*L[i]*h[i];

 qsort(1,n);

 for (i=1;i<=n+2;i++)
    v[i]=0;
 v[n]=1;
 long int max=0;
 for (i=n-1;i>=1;i--)
    {
     max=0;
     for (j=i+1;j<=n;j++)
if (v[j]>=max && intra(i,j)==0)
 {
  max=v[j];
  //break;
 }
     v[i]=max+1;
    }

 max=0;
 for (i=1;i<=n;i++)
    if (max<=v[i])
      max=v[i];

 fprintf(g,"%ld\n",max);
 }
 fclose(f);
 fclose(g);
 return 0;
}