Pagini recente » Cod sursa (job #311486) | Cod sursa (job #1340411) | Cod sursa (job #1793299) | Cod sursa (job #2914048) | Cod sursa (job #47348)
Cod sursa(job #47348)
#include <stdio.h>
struct cut{
int x , y , z ; } tab[3500] ;
long long v[3500] ;
int c[3500] ;
void quicksort(int i , int j)
{
if(i < j)
{
int st = i - 1 , dr = j ;
long piv = v[j] , t ;
struct cut tmp ;
for( ; ; )
{
while(v[++st] > piv) ;
while(v[--dr] < piv) ;
if(st > dr) break ;
t = v[st] ;
tmp = tab[st] ;
v[st] = v[dr] ;
tab[st] = tab[dr] ;
v[dr] = t ;
tab[dr] = tmp ;
}
t = v[st] ;
tmp = tab[st] ;
v[st] = v[j] ;
tab[st] = tab[j] ;
v[j] = t ;
tab[j] = tmp ;
quicksort(i , st - 1) ;
quicksort(st , j) ;
}
}
int main()
{
int i , j , t , n , max ;
FILE *in , *out ;
in = fopen("cutii.in" , "rt") ;
out = fopen("cutii.out" , "wt") ;
fscanf(in , "%d %d" , &n , &t) ;
while(t--)
{
for(i = 0 ; i < n ; i++)
{
fscanf(in , "%d %d %d" , &tab[i].x , &tab[i].y , &tab[i].z) ;
v[i] = tab[i].x * tab[i].y * tab[i].z ;
}
quicksort(0 , n-1) ;
for(i = 0 ; i < n ; i++) c[i] = 1 ;
max = 0 ;
for(i = n - 2 ; i >= 0 ; i--) for(j = i + 1 ; j < n ; j++) if((tab[i].x > tab[j].x && tab[i].y > tab[j].y && tab[i].z > tab[j].z) && (c[i] < c[j] + 1))
{
c[i] = c[j] + 1 ;
if(c[i] > max) max = c[i] ;
}
fprintf(out , "%d\n" , max) ;
}
fclose(in) ;
fclose(out) ;
return 0 ;
}