Cod sursa(job #428073)

Utilizator irene_mFMI Irina Iancu irene_m Data 28 martie 2010 19:53:20
Problema Matrice 2 Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <cstdio>
#define infile "matrice2.in"
#define outfile "matrice2.out"
#define MaxN 324

int a[MaxN][MaxN];
int uz[MaxN][MaxN];
int dx[4]={0,0,1,-1}, dy[4]={1,-1,0,0};
int N,Q;
int x1,y1,x2,y2;
int st,dr,m,sol;
int X[MaxN*MaxN],Y[MaxN*MaxN];

int BF(int val)
{
      int i,p=0,xi,yi,x,y,k;
      for(i=1;i<=N;i++)
            for(k=1;k<=N;k++)
                  uz[i][k]=0;

      X[++p]=x1; Y[p]=y1;
      uz[x1][y1]=1;

      for(i=1;i<=p;i++)
      {
            xi=X[i]; yi=Y[i];
            for(k=0;k<4;k++)
            {
                  x=xi+dx[k]; y=yi+dy[k];
                  if(x>0 && y>0 && x<=N && y<=N && a[x][y]>=val && !uz[x][y])
                  {
                        X[++p]=x; Y[p]=y;
                        uz[x][y]=1;

                        if(x==x2 && y==y2)
                              return 1;
                  }
            }
      }

      return 0;
}




int main()
{
      freopen(infile,"r",stdin);
      freopen(outfile,"w",stdout);

      scanf("%d%d",&N,&Q);
      int i,j;
      for(i=1;i<=N;i++)
            for(j=1;j<=N;j++)
                  scanf("%d",&a[i][j]);

      for(;Q;Q--)
      {
            scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
            st=1; dr=a[x1][y1]; sol=0;
            while(st<=dr)
            {
                  m=(st+dr)/2;
                  if(BF(m))
                  {
                        st=m+1;
                        sol=m;
                  }
                  else
                        dr=m-1;
            }
            printf("%d\n",sol);
      }

      fclose(stdin);
      fclose(stdout);
      return 0;
}