Pagini recente » Cod sursa (job #1541656) | Cod sursa (job #314724) | Cod sursa (job #2262444) | Cod sursa (job #294038) | Cod sursa (job #249918)
Cod sursa(job #249918)
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int a, b, c;
} Cutie;
int N;
Cutie cs[3500];
int ms[3500], Ms[3500];
int ccmp(const void *_x, const void *_y) {
Cutie *x = (Cutie*)_x, *y = (Cutie*)_y;
if ((x->a == y->a) && (x->b == y->b)) {
return (x->c - y->c);
} else if (x->a == y->a) {
return (x->b - y->b);
}
return (x->a - y->a);
}
int fits(int i, int j) {
return ((cs[i].a < cs[j].a) && (cs[i].b < cs[j].b) && (cs[i].c < cs[j].c));
}
void swap(int *x, int *y) {
int aux = *x;
*x = *y;
*y = aux;
}
void calcMs() {
int m, i, j;
ms[0] = 1;
Ms[0] = 1;
for (i = 1; i < N; ++i) {
m = 0;
for (j = i-1; j >= 0; --j) {
if (fits(j, i) && (ms[j] > m))
m = ms[j];
if (m > Ms[j])
break;
}
ms[i] = m+1;
Ms[i] = Ms[i-1];
if (m+1 > Ms[i])
Ms[i] = m+1;
}
}
int main(int argc, char *argv[]) {
int T, i;
FILE *fi = fopen("cutii.in", "r");
fscanf(fi, "%d %d", &N, &T);
FILE *fo = fopen("cutii.out", "w");
while (T--) {
for (i = 0; i < N; ++i)
fscanf(fi, "%d %d %d", &(cs[i].a), &(cs[i].b), &(cs[i].c));
qsort(cs, N, sizeof(cs[0]), ccmp);
calcMs();
/*for (i = 0; i < N; ++i)
printf("%d %d %d\n", cs[i].a, cs[i].b, cs[i].c);
printf("\n");
for (i = 0; i < N; ++i)
printf("%d ", ms[i]);
printf("\n\n");*/
fprintf(fo, "%d\n", Ms[N-1]);
}
fclose(fo);
fclose(fi);
return 0;
}