Cod sursa(job #1218401)
Utilizator | Data | 10 august 2014 22:04:06 | |
---|---|---|---|
Problema | Matrice 2 | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.37 kb |
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *f=fopen("matrice.in","r");
FILE *g=fopen("matrice.out","w");
int v[305][305],n,q,maxim,st,dr,mijl,sol;
int x1,y1,x2,y2,k;
int x[305][305];
int lin[100000],col[10000],l,c,nr;
int main()
{int i,j;
fscanf(f,"%d %d",&n,&q);
for (i=1;i<=n;i++) for (j=1;j<=n;j++) {fscanf(f,"%d",&v[i][j]);}
while (q!=0)
{
fscanf(f,"%d %d %d %d",&x1,&y1,&x2,&y2);
st=1;dr=v[x1][y1];
sol=0;
while (st<=dr) {mijl=(st+dr)>>1;
nr=1;
lin[1]=x1;
col[1]=y1;
k++;
x[x1][y1]=k;
i=1;
while (i<=nr)
{l=lin[i];c=col[i];
if (v[l+1][c]>=mijl&&x[l+1][c]!=k) {nr++;
lin[nr]=l+1;
col[nr]=c;
x[l+1][c]=k;
}
if (v[l-1][c]>=mijl&&x[l-1][c]!=k) {nr++;
lin[nr]=l-1;
col[nr]=c;
x[l-1][c]=k;
}
if (v[l][c+1]>=mijl&&x[l][c+1]!=k) {nr++;
lin[nr]=l;
col[nr]=c+1;
x[l][c+1]=k;
}
if (v[l][c-1]>=mijl&&x[l][c-1]!=k) {nr++;
lin[nr]=l;
col[nr]=c-1;
x[l][c-1]=k;
}
++i;}
if (x[x2][y2]==k) {sol=mijl;
st=mijl+1;
}
else dr=mijl-1;
}
fprintf(g,"%d\n",sol);
q--;}
return 0;
}