Pagini recente » Cod sursa (job #653284) | Cod sursa (job #938199) | Cod sursa (job #1951477) | Cod sursa (job #418119) | Cod sursa (job #64785)
Cod sursa(job #64785)
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
long i,j,k;
}element;
element x[4000],c[4000];
int cmp(const void*a, const void*b)
{
long int x=*(long int*)a,y=*(long int*)b;
if(c[x].i==c[y].i &&c[x].j==c[y].j) return c[x].k-c[y].k;
else if (c[x].i==c[y].i) return c[x].j-c[y].j;
else return c[x].i-c[y].i;
}
int main()
{int ord[4000],n,t,aux,i,ok,p,k,j,ii,l[3502],q[3502],max,r,jj;
FILE*f=fopen("cutii.in","r");
FILE*g=fopen("cutii.out","w");
fscanf(f,"%d %d",&n,&t);
for (r=1;r<=t;r++)
{ ii=0;
for (i=1; i<=n;i++) fscanf(f,"%d %d %d",&c[i].i,&c[i].j,&c[i].k);
for(jj=1;jj<=n;++jj) ord[jj]=jj;
qsort(ord,n+1,sizeof(long int),cmp);
for(jj=1;jj<=n;++jj)
{
x[jj].i=c[ord[jj]].i;
x[jj].j=c[ord[jj]].j;
x[jj].k=c[ord[jj]].k;
}
q[n]=0; l[n]=1;
for (i=n-1; i>=1;i--)
{
max=0; k=0;
for (j=i+1; j<=n;j++)
if (x[i].i<x[j].i&&l[j]>max&&x[i].j<x[j].j&&x[i].k<x[j].k) {max=l[j]; k=j;}
l[i]=max+1;
q[i]=k;
}
max=0;
for (i=1;i<=n;i++) if (l[i]>max) {max=l[i]; p=i;}
ii=0;
while (p!=0)
{
ii++;
p=q[p];
}
fprintf(g,"%d\n",ii);}
fclose(f);
fclose(g);
return 0;}