Advertisement
nein_yards

minerobots

Oct 1st, 2022 (edited)
273
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.40 KB | None | 0 0
  1. def min_mine_robots(n, nums):
  2.  
  3. def compute_right_mat():
  4. nonlocal mat, right_mat
  5. for r in range(n):
  6. rs = 0
  7. for c in range(n-1, -1, -1):
  8. if mat[r][c]:
  9. rs += 1
  10. right_mat[r][c] = rs
  11.  
  12. def compute_up_mat():
  13. nonlocal mat, up_mat
  14. for c in range(n):
  15. rs = 0
  16. for r in range(n):
  17. if mat[r][c]:
  18. rs += 1
  19. up_mat[r][c] = rs
  20.  
  21. mat = [[False for c in range(n)] for r in range(n)]
  22. for num in nums:
  23. r = n - 1 - num // n
  24. c = num % n
  25. mat[r][c] = True
  26.  
  27. up_mat = [[0 for c in range(n)] for r in range(n)]
  28. right_mat = [[0 for c in range(n)] for r in range(n)]
  29.  
  30. mines_left = len(nums)
  31. result = 0
  32. while mines_left > 0:
  33. compute_up_mat()
  34. compute_right_mat()
  35. x = 0
  36. y = n - 1
  37. result += 1
  38.  
  39. while x < n and y >= 0:
  40. if mat[y][x]:
  41. mat[y][x] = False
  42. mines_left -= 1
  43. if mines_left == 0:
  44. break
  45. if x < n-1 and right_mat[y][x+1] > 0:
  46. x += 1
  47. elif y > 0 and up_mat[y-1][x] > 0:
  48. y -= 1
  49. if y < 0:
  50. pass
  51. else:
  52. break
  53. return result
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement