Pagini recente » Cod sursa (job #1285221) | Cod sursa (job #2728847) | Cod sursa (job #2570401) | Cod sursa (job #2476351) | Cod sursa (job #564551)
Cod sursa(job #564551)
#include <cstdio>
#include <cstdlib>
struct cutie
{
int x;
int y;
int z;
};
int compare(const void* a, const void *b)
{
if ((cutie*)a->x != (cutie*)b->x)
return (cutie*)a->x - (cutie*)b->x;
if ((cutie*)a->y != (cutie*)b->y)
return (cutie*)a->y - (cutie*)b->y;
if ((cutie*)a->z != (cutie*)b->z)
return (cutie*)a->z - (cutie*)b->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 = 0;
cutie *mat;
int *dyn;
FILE *f = fopen("cutii.in", "r");
FILE *g = fopen("cutii.out", "w");
fscanf(f,"%d %d\n", &N, &T);
mat = new cutie[N + 1];
dyn = new int[N + 1];
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; j >= 1 ; --j)
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);
}
delete[] mat;
return 0;
}