Cod sursa(job #591539)

Utilizator maritimCristian Lambru maritim Data 24 mai 2011 18:19:26
Problema Zone Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include<stdio.h>

long long A[520][520];
int sol[10];
bool viz[10];
int C[3];
int L[3];
int N;
int a;
int gata = 0;

inline bool verif(int nr)
{
	short int i;
	for(i = 1;(sol[i] != nr || viz[i]) && i<= 9;i++);
	return i < 10;
}

void cautare(int i)
{
	L[1] = i;
	int j;
	for( j = i+1;j<=N && (!verif(A[j][C[1]]-A[i][C[1]]) ||
		!verif(A[j][C[2]]-A[i][C[2]]-A[j][C[1]]+A[i][C[1]]) ||
		!verif(A[j][N]-A[i][N]-A[j][C[2]]+A[i][C[2]]) ||
		!verif(A[N][C[1]]-A[j][C[1]]) ||
		!verif(A[N][C[2]]-A[j][C[2]]-A[N][C[1]]+A[j][C[1]]) ||
		!verif(A[N][N]-A[j][N]-A[N][C[2]]+A[j][C[2]]));j++);
	L[2] = j;
	if(j <=N)
		gata = 1;
}

void solve2(int lst,int a)
{
	for(int j=lst+1;j<=N && !gata;j++)
		if(verif(A[a][j] - A[a][lst]))
		{
			C[2] = j;
			cautare(a);
		}
}

void solve(void)
{
	for(int i=1;i<=N && !gata;i++)
		for(int j=1;j<=N && !gata;j++)
			if(verif(A[i][j]))
			{
				C[1] = j;
				solve2(j,i);
			}
}

int main()
{
	FILE *f = fopen("zone.in","r");
	FILE *g = fopen("zone.out","w");
	
	fscanf(f,"%d",&N);
	for(int i=1;i<=9;i++)
		fscanf(f,"%d ",&sol[i]);
	for(int i=1;i<=N;i++)
		for(int j=1;j<=N;j++)
		{
			fscanf(f,"%d",&a);
			A[i][j] = a + A[i-1][j] + A[i][j-1] - A[i-1][j-1];
		}
//	for(int i=1;i<=N;i++)
//	{
//		for(int j=1;j<=N;j++)
//			printf("%d ",A[i][j]);
//		printf("\n");
//	}
	solve();
	fprintf(g,"%d %d %d %d",L[1],L[2],C[1],C[2]);
	
	fclose(g);
	fclose(f);
	return 0;
}