Cod sursa(job #18285)

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

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

int n, s[128][128],sum[9],rip[4];

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);
}


void compl(int p)
{
 int v;
 for(v=1;v<=n;v++)
    {
     rip[p]=v;
     if(valid(p))
       if(final(p)) 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(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;

}