Cod sursa(job #21729)

Utilizator FlorianFlorian Marcu Florian Data 24 februarie 2007 09:09:45
Problema Cutii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<stdio.h>
int main()
{int n,t,x[3502],y[3502],aux,z[3502],i,ok,p,k,j,ii,l[3502],q[3502],max,r;
FILE *f,*g;
f=fopen("cutii.in","r");
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",&x[i],&y[i],&z[i]);
		do
		  {ok=1;
		  for (i=1;i<=n-1;i++)
				if (x[i]>x[i+1]) {ok=0;
									aux=x[i]; x[i]=x[i+1]; x[i+1]=aux;
									aux=y[i]; y[i]=y[i+1]; y[i+1]=aux;
									aux=z[i]; z[i]=z[i+1]; z[i+1]=aux;}
				else if (x[i]==x[i+1]) if (y[i]>y[i]+1)
									{ok=0;
									aux=x[i]; x[i]=x[i+1]; x[i+1]=aux;
									aux=y[i]; y[i]=y[i+1]; y[i+1]=aux;
									aux=z[i]; z[i]=z[i+1]; z[i+1]=aux;}
							else if (y[i]==y[i+1]) if (z[i]>z[i+1]) {ok=0;
										aux=x[i]; x[i]=x[i+1]; x[i+1]=aux;
										aux=y[i]; y[i]=y[i+1]; y[i+1]=aux;
										aux=z[i]; z[i]=z[i+1]; z[i+1]=aux;}
				}
		while (ok==0) ;
	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]<x[j]&&l[j]>max&&y[i]<y[j]&&z[i]<z[j]) {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;}
while (p!=0)
	{ii++;
	p=q[p];}
fprintf(g,"%d\n",ii);}
fclose(f);
fclose(g);
return 0;}