// IDEA: first fill the whole region up to the highest point, the de-flood // (start at an edge & keep deflooding until the water is level, or we reach // a wall) #include #include int A[102][102]; int B[102][102]; int n, m; #define max(a,b) (a > b ? a : b) #define min(a,b) (a < b ? a : b) int min_4 (int a, int b, int c, int d) { return min( min(a, b), min(c, d) ); } void main() { ifstream in; in.open("juice.in"); ofstream out; out.open("juice.out"); int kk; in >> kk; for (int i=0; i < kk; i++) { in >> n >> m; int big = -1; memset(A, 0, sizeof(A)); memset(B, 0, sizeof(B)); for (int j=1; j <= n; j++) for (int k=1; k <= m; k++) { in >> A[j][k]; if (A[j][k] > big) big = A[j][k]; } // flood for (j=1; j <= n; j++) for (k=1; k <= m; k++) B[j][k] = big; int quit = 0; while (!quit) { quit = 1; for (j=1; j <= n; j++) for (k=1; k <= m; k++) { int old = B[j][k]; B[j][k] = max(A[j][k], min_4(B[j-1][k], B[j+1][k], B[j][k-1], B[j][k+1])); if (old != B[j][k]) quit = 0; } } // count long volume = 0; for (j=1; j <= n; j++) for (k=1; k <= m; k++) volume += B[j][k] - A[j][k]; out << volume << endl; } in.close(); out.close(); } Downloader failed! Response object 006~ASP 0159~Buffering Off~Buffering must be on.