Pagini recente » Borderou de evaluare (job #1567681) | Cod sursa (job #3180908) | Cod sursa (job #72749) | Cod sursa (job #1724394) | Cod sursa (job #34847)
Cod sursa(job #34847)
#include <cstdio>
#include <cassert>
#include <algorithm>
#define INF 0x3f3f3f3f
#define NX 101
using namespace std;
struct sol {
int valmin, cnt;
sol( int a = 0, int b = 0 ) {
valmin = a, cnt = b;
}
};
struct ent {
int val, poz;
ent( int a = 0, int b = 0 ) {
val = a, poz = b;
}
};
int a[NX][NX], c[NX][NX];
int M, N, P, DX, DY;
inline
void umin( int& x, int y ) {
x > y ? x = y : 0 ;
}
inline
void umax( int& x, int y ) {
x < y ? x = y : 0 ;
}
sol rez() {
int i, j, ii, jj, vmin, vmax, minc, cnt;
minc = INF;
for( i = 1; i <= M - DX + 1; i++ )
for( j = 1; j <= N - DY + 1; j++ ) {
vmin = INF, vmax = 0;
for( ii = i; ii <= i + DX - 1; ii++ )
for( jj = j; jj <= j + DY - 1; jj++ ) {
umin( vmin, a[ii][jj] );
umax( vmax, a[ii][jj] );
}
c[i][j] = vmax - vmin;
umin( minc, c[i][j] );
assert( c[i][j] >= 0 );
}
cnt = 0;
for( i = 1; i <= M - DX + 1; i++ )
for( j = 1; j <= N - DY + 1; j++ )
if( c[i][j] == minc )
cnt++;
return sol( minc, cnt );
}
void cit() {
int i, j;
scanf( "%d%d%d", &M, &N, &P );
for( i = 1; i <= M; i++ )
for( j = 1; j <= N; j++ )
scanf( "%d", &a[i][j] );
for( ; P; P-- ) {
scanf( "%d%d", &DX, &DY );
sol x, y;
x = rez();
if( DX != DY ) {
swap( DX, DY );
y = rez();
if( y.valmin < x.valmin )
x = y;
if( y.valmin == x.valmin )
x.cnt += y.cnt;
}
printf( "%d %d\n", x.valmin, x.cnt );
}
}
int main() {
freopen( "struti.in", "r", stdin );
freopen( "strutibf.out", "w", stdout );
cit();
return 0;
}