Cod sursa(job #388514)

Utilizator ooctavTuchila Octavian ooctav Data 30 ianuarie 2010 12:48:41
Problema Flux maxim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <cstdio>
#define NMAX 257
int e[NMAX][NMAX];
int N;
int lungime=0;

int identic(int l1 ,int c1,int l2,int c2)
{
	int a=e[l1][c1];
	for(int i=l1;i<=l2;i++)
		for(int j=c1;j<=c2;j++)
			if(e[i][j]!=a)
				return 0;
	return 1;	
}

void compresie(int l1,int c1,int l2,int c2)
{
	if(identic(l1,c1,l2,c2))
	{
		lungime+=2;
		return ;
	}
	lungime+=1;
	compresie((l1+l2)/2,c1,l2,(c1+c2)/2);
	compresie(l1,c1,(l1+l2)/2,(c1+c2)/2);
	compresie((l1+l2)/2,(c1+c2)/2,l2,c2);
	compresie(l1,(c1+c2)/2,(l1+l2)/2,c2);
		
}

int main()
{
	freopen("compresie.in","r",stdin);
	freopen("compresie.out","w",stdout);
	scanf("%d",&N);
	for(int i=1;i<=N;i++)
		for(int j=1;j<=N;j++)
			scanf("%d",&e[i]);
	compresie(1,1,N,N);
	printf("%d",lungime);
	
	return 0;
}