Cod sursa(job #20789)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 22 februarie 2007 11:56:29
Problema Zone Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.01 kb
#include<stdio.h>
int n,l1,l2,c1,c2,ok,i,j;long int a,t[10],ar[10],s[10][10],aux;
int ver2()
{   ar[1]=s[l1][c1];
    ar[2]=s[l1][c2]-s[l1][c1];
    ar[3]=s[l1][n]-s[l1][c2];
    ar[4]=s[l2][c1]-s[l1][c1];
    ar[5]=s[l2][c2]-s[l2][c1]-s[l1][c2]+s[l1][c1];
    ar[6]=s[l2][n]-s[l2][c2]-s[l1][n]+s[l1][c2];
    ar[7]=s[n][c1]-s[l2][c1];
    ar[8]=s[n][c2]-s[n][c1]-s[l2][c2]+s[l2][c1];
    ar[9]=s[n][n]-s[n][c2]-s[l2][n]+s[l2][c2];
    for(i=1;i<=8;i++)
	for(j=i+1;j<=9;j++)
		if(ar[i]>ar[j]){aux=ar[i];ar[i]=ar[j];ar[j]=aux;}
    for(i=1;i<=9;i++) if(ar[i]!=t[i]) return 0;
    return 1;
}
int aria(int caz)
{
	if(caz==1) return s[l1][c1];
	if(caz==2) return s[l1][c2]-s[l1][c1];
	if(caz==3) return s[l1][n]-s[l1][c2];
	if(caz==4) return s[l2][c1]-s[l1][c1];
	if(caz==5) return s[l2][c2]-s[l2][c1]-s[l1][c2]+s[l1][c1];
	if(caz==6) return s[l2][n]-s[l2][c2]-s[l1][n]+s[l1][c2];
	if(caz==7) return s[n][c1]-s[l2][c1];
	if(caz==8) return s[n][c2]-s[n][c1]-s[l2][c2]+s[l2][c1];
	if(caz==9) return s[n][n]-s[n][c2]-s[l2][n]+s[l2][c2];
return 0;
}
int ver(int caz)
{   long int v;
    v=aria(caz);
     for(i=1;i<=9;i++)
      if(v==t[i]) return 1;
    return 0;
}
int ver1()
{
	return ver(3)&&ver(5)&&ver(6)&&ver(7)&&ver(8)&&ver(9);
}
int main()
{ FILE *f=fopen("zone.in","r");
  fscanf(f,"%d",&n);
  for(i=1;i<=9;i++)
  fscanf(f,"%ld",&t[i]);
  for(i=1;i<=8;i++)
   for(j=i+1;j<=9;j++)
    if(t[i]>t[j])
     {aux=t[i];t[i]=t[j];t[j]=aux;}
  for(i=1;i<=n;i++)
   for(j=1;j<=n;j++)
    {fscanf(f,"%ld",&a);
    s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a;}
  fclose(f);
  ok=0;
  for(l1=1;l1<=n-2;l1++)
       {for(c1=1;c1<=n-2;c1++)
		{if(ver(1))
			for(l2=l1+1;l2<=n-1;l2++)
			       {if(ver(4))
					for(c2=c1+1;c2<=n-1;c2++)
						if(ver(2))
						 if(ver1())
						   if(ver2())
						    {ok=1;break;}
				if(ok) break;
			       }
		 if(ok)break;
		}
       if(ok)break;
       }
  f=fopen("zone.out","w");
  fprintf(f,"%d %d %d %d\n",l1,l2,c1,c2);
  fclose(f);
  return 0;
}