Cod sursa(job #18544)

Utilizator tudalexTudorica Constantin Alexandru tudalex Data 18 februarie 2007 12:34:52
Problema Zone Scor 70
Compilator cpp Status done
Runda preONI 2007, Runda 2, Clasa a 9-a si gimnaziu Marime 1.19 kb
#include <stdio.h>
int m[513][513],a[513][513],v[513],u[513];
int i,j,l1,l2,c1,c2,n,sum;
bool exist(int x)
{
	int g;
	for (int i=1;i<=9;++i)
		if (v[i]==x && u[i]==0)
	{
		u[i]=1;
		return true;
	}
	return false;
}
void unmark()
{
	for (int i=1;i<=9;++i) u[i]=0;
}
int main()
{
	freopen("zone.in","r",stdin);
	freopen("zone.out","w",stdout);
	scanf("%d",&n);
	for (i=1;i<10;++i) scanf("%d",&v[i]);
	for (i=1;i<=n;++i)
		for (j=1;j<=n;++j) scanf("%d",&m[i][j]);
	for (i=1;i<=n;++i)
	{
		sum=0;
		for (j=1;j<=n;++j)
		{
			sum+=m[i][j];
			a[i][j]=sum+a[i-1][j];
		}
	}
	for (l1=1;l1<=n;++l1)
		for (c1=1;c1<=n;++c1)
		{
			if (exist(a[l1][c1]))
			{
				for (l2=l1+1;l2<=n;++l2)
					for (c2=c1+1;c2<=n;++c2)
						if (exist(a[n][n]-a[l2][n]-a[n][c2]+a[l2][c2]))
						{
							if (exist(a[l2][c1]-a[l1][c1])) 
							if (exist(a[n][c1]-a[l2][c1]))
							if (exist(a[l1][c2]-a[l1][c1]))
							if (exist(a[l1][n]-a[l1][c2]))
							if (exist(a[l2][c2]+a[l1][c1]-a[l1][c2]-a[l2][c1]))
							if (exist(a[l2][n]+a[l1][c2]-a[l1][n]-a[l2][c2]))
							if (exist(a[n][c2]+a[l2][c1]-a[n][c1]-a[l2][c2]))
										printf("%d %d %d %d\n",l1,l2,c1,c2);
							unmark();
						}
				unmark();
			}
		}
	
	return 0; 												
}