Giả sử, chúng ta được cung cấp một hộp lưới m x n, trong đó mỗi ô có một bảng được đặt từ trên cùng bên phải sang dưới cùng bên trái hoặc từ trên cùng bên trái đến dưới cùng bên phải. Bây giờ từ các ô trên cùng, một quả bóng được đưa vào hộp và chúng ta phải kiểm tra xem quả bóng đó có chạm đến đáy hộp hay không. Lưới được đưa ra dưới dạng ma trận. Nếu một ô được đánh dấu 1, bảng đường chéo kéo dài từ trên cùng bên trái sang dưới cùng bên phải; nếu nó được đánh dấu -1 thì nó kéo dài từ góc trên bên phải đến góc dưới bên trái. Nếu bỏ n viên bi vào hộp thì ta phải tính xem có bao nhiêu viên bi chạm đáy.
Ví dụ về hộp lưới 3x3.
Vì vậy, nếu đầu vào giống như mat =
1 | 1 | 1 | -1 |
-1 | 1 | 1 | -1 |
1 | -1 | -1 | 1 |
1 | -1 | 1 | -1 |
thì đầu ra sẽ là [-1, -1, -1, -1]
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
i:=số hàng trong thảm
-
j:=số cột trong mat
-
res:=một danh sách mới
-
cho val trong phạm vi từ 0 đến j, thực hiện
-
x:=val
-
đối với r trong phạm vi 0 đến i, thực hiện
-
s:=mat [r, x]
-
x:=x + mat [r, x]
-
nếu x <0 hoặc x> =j hoặc mat [r, x] không giống với s thì
-
thêm phần tử -1 vào cuối res
-
đi ra từ vòng lặp
-
-
-
nếu không,
-
thêm x vào cuối res
-
-
-
trả lại res
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn
def solve(mat): i, j = map(len, (mat, mat[0])) res = [] for val in range(j): x = val for r in range(i): s = mat[r][x] x += mat[r][x] if x < 0 or x >= j or mat[r][x] != s: res += [-1] break else: res += [x] return res print(solve([[1, 1, 1, -1], [-1, 1, 1, -1], [1, -1, -1, 1],[1, -1, 1, -1] ]))
Đầu vào
[[1, 1, 1, -1], [-1, 1, 1, -1], [1, -1, -1, 1],[1, -1, 1, -1] ]
Đầu ra
[-1, -1, -1, -1]