Cod sursa(job #18310)

Utilizator undogSavu Victor Gabriel undog Data 18 februarie 2007 11:23:52
Problema Zone Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 2, Clasa a 9-a si gimnaziu Marime 1.88 kb
#include <stdio.h>

void compl(int);
int final(int);
int valid(int);
void scrie();
int verific(int);

int n, s[512][512],sum[9],rip[4],c=0;

void main()
{
 FILE *in=fopen("zone.in","rt");
 int i,j;
 fscanf(in,"%d",&n);
 for(i=0;i<9;i++)
  fscanf(in,"%d",&sum[i]);
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
   fscanf(in,"%d",&s[i][j]);

 compl(0);

 fclose(in);
}

void scrie(){
 FILE *out=fopen("zone.out","w+");
 fprintf(out,"%d %d %d %d\n",rip[0],rip[1],rip[2],rip[3]);
 fclose(out);
 c=1;
}


void compl(int p)
{
 int v;
 for(v=1;v<=n&&!c;v++)
    {
     rip[p]=v;
     if(valid(p))
       if(final(p)&&!c) scrie();
       else compl(p+1);
    }
}

int final(int p)
{
 return p==3;
}


int verific(int su){
 for(int i=0;i<9;i++)
  if(su==sum[i])
   return 0;
return 1;
}



int valid(int p)
{

 if(c)return 0;
 if(p!=3)return 1;


 int i,j,k,su=0;
 for(i=0;i<rip[0];i++)
  for(j=0;j<rip[2];j++)
   su+=s[i][j];
 if(verific(su))
   return 0;
 su=0;

 for(i=rip[0];i<rip[1];i++)
  for(j=0;j<rip[2];j++)
   su+=s[i][j];
 if(verific(su))
  return 0;
 su=0;

 for(i=rip[1];i<n;i++)
  for(j=0;j<rip[2];j++)
   su+=s[i][j];
 if(verific(su))
  return 0;
 su=0;

 for(i=0;i<rip[0];i++)
  for(j=rip[2];j<rip[3];j++)
   su+=s[i][j];
 if(verific(su))
  return 0;
 su=0;


 for(i=rip[0];i<rip[1];i++)
  for(j=rip[2];j<rip[3];j++)
   su+=s[i][j];
 if(verific(su))
  return 0;
 su=0;

 for(i=rip[1];i<n;i++)
  for(j=rip[2];j<rip[3];j++)
   su+=s[i][j];
 if(verific(su))
  return 0;
 su=0;

 for(i=0;i<rip[0];i++)
  for(j=rip[3];j<n;j++)
   su+=s[i][j];
 if(verific(su))
  return 0;
 su=0;

 for(i=rip[0];i<rip[1];i++)
  for(j=rip[3];j<n;j++)
   su+=s[i][j];
 if(verific(su))
  return 0;
 su=0;

 for(i=rip[1];i<n;i++)
  for(j=rip[3];j<n;j++)
   su+=s[i][j];
 if(verific(su))
  return 0;
 su=0;


return 1;

}