Guest User

Остров после дождя

a guest
Oct 16th, 2016
551
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.36 KB | None | 0 0
  1. def water_volume(island, a, b):
  2.     result = 0
  3.    
  4.     max_height = max([height for row in island for height in row])
  5.  
  6.     rained_island = []
  7.  
  8.     for i in range(a):
  9.         rained_island.append([])
  10.  
  11.         for j in range(b):
  12.             if i == 0 or i == a - 1 or j == 0 or j == b - 1:
  13.                 rained_island[i].append(island[i][j])
  14.             else:
  15.                 rained_island[i].append(max_height)
  16.    
  17.     is_changed = True
  18.  
  19.     while is_changed:
  20.         is_changed = False
  21.  
  22.         for i in range(1, a - 1):
  23.             for j in range(1, b - 1):
  24.                 min_height = min(rained_island[i - 1][j], rained_island[i][j - 1], rained_island[i][j + 1], rained_island[i + 1][j])
  25.                
  26.                 if rained_island[i][j] > min_height and rained_island[i][j] != island[i][j]:
  27.                      rained_island[i][j] = min_height if min_height > island[i][j] else island[i][j]
  28.                      is_changed = True
  29.  
  30.     for i in range(a):
  31.         for j in range(b):
  32.             result += rained_island[i][j] - island[i][j]
  33.  
  34.     return result
  35.  
  36. K = int(input())
  37. results = []
  38.  
  39. for i in range(K):
  40.     island = []
  41.     N, M = (int(p) for p in input().split())
  42.  
  43.     for j in range(N):
  44.         island.append([int(p) for p in input().split()])
  45.  
  46.     results.append(water_volume(island, N, M))
  47.    
  48. for x in results:
  49.     print(x)
Advertisement
Add Comment
Please, Sign In to add comment