Cod sursa(job #73102)

Utilizator ProtomanAndrei Purice Protoman Data 16 iulie 2007 19:22:15
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <stdio.h>
FILE *f1,*f2;
long n,t,i,j,k,max;
long x[4001],y[4001],z[4001],v[4001];
long long a[4001];

void radix()
{
	long p,i,j,x,nr;
	long long m[10][1501],k;
	p=1;
	for (i=1;i<=20;i++)
	{
		for (j=0;j<=9;j++) m[j][0]=0;
		for (j=1;j<=n;j++)
		{
			x=a[j]/p%10;
			m[x][m[x][0]+1]=a[j];
			m[x][0]++;
		}
		nr=0;
		for (j=0;j<=9;j++)
		{
			for (k=1;k<=m[j][0];k++)
			{
				nr++;
				a[nr]=m[j][k];
			}
		}
		p=p*10;
	}
}

int main()
{
	f1=fopen("cutii.in","r");
	f2=fopen("cutii.out","w");
	fscanf(f1,"%ld",&n);
	fscanf(f1,"%ld",&t);
	for (k=1;k<=t;k++)
	{
		for (i=1;i<=n;i++)
		{
			fscanf(f1,"%ld",&x[i]);
			fscanf(f1,"%ld",&y[i]);
			fscanf(f1,"%ld",&z[i]);
			a[i]=x[i];
			a[i]=a[i]*100000000;
			a[i]=a[i]+y[i]*10000;
            a[i]=a[i]+z[i];
		}
		radix;
		for (i=1;i<=n;i++) 
		{
			x[i]=a[i]/100000000;
            y[i]=a[i]%100000000/10000;
            z[i]=a[i]%10000;
		}
		for (i=n;i>=1;i--)
		{
			max=0;
			for (j=i+1;j<=n;j++)
			{
				if (x[i]<x[j] && y[i]<y[j] && z[i]<z[j] && v[j]>max) max=v[j];
				if (n-j==max) break;
			}
			v[i]=max+1;
		}
		max=0;
		for (i=1;i<=n;i++)
		{
			if (max<v[i]) max=v[i];
			v[i]=0;
		}
		fprintf(f2,"%ld",max);
		fprintf(f2,"\n");
	}
	fclose(f1);
	fclose(f2);
	return(0);
}