Pagini recente » Cod sursa (job #35207) | Cod sursa (job #2250916) | Cod sursa (job #2827005) | Cod sursa (job #2465441) | Cod sursa (job #564612)
Cod sursa(job #564612)
#include <cstdio>
#include <cstdlib>
struct cutie
{
int x;
int y;
int z;
};
int compare(const void* a, const void *b)
{
cutie *a1 = (cutie*)a;
cutie *b1 = (cutie*)b;
if (a1->x != b1->x)
return a1->x - b1->x;
if (a1->y != b1->y)
return a1->y - b1->y;
if (a1->z != b1->z)
return a1->z - b1->z;
return 0;
}
bool incape(cutie *a, cutie *b)
{
return a->x < b->x && a->y < b->y && a->z < b->z;
}
int main()
{
int N, T, myMax;
cutie mat[3501];
int dyn[3501];
FILE *f = fopen("cutii.in", "r");
FILE *g = fopen("cutii.out", "w");
fscanf(f,"%d %d\n", &N, &T);
for (int i = 0 ; i < T ; ++i)
{
myMax = 1;
for (int j = 1 ; j <= N ; ++j)
fscanf(f, "%d %d %d",&mat[j].x, &mat[j].y, &mat[j].z);
qsort(mat + 1, N, sizeof(cutie), compare);
dyn[1] = 1;
for (int j = 2 ; j <= N ; ++j)
{
int max = 0;
for (int k = j - 1; k >= 1 ; --k)
if (incape(&mat[k], &mat[j]) && (max == 0 || dyn[max] < dyn[k]))
max = k;
if (max != 0)
dyn[j] = dyn[max] + 1;
else
dyn[j] = 1;
if (dyn[j] > myMax)
myMax = dyn[j];
}
fprintf(g, "%d\n", myMax);
}
return 0;
}