Giả sử chúng ta có hai mảng A và B. Kích thước của A là số hàng và A [i] là số hộp trong hàng thứ i. Và B là mảng các quả bóng trong đó B [i] biểu thị một số trên quả bóng. Cho rằng quả bóng i (giá trị B [i]) sẽ được đặt trong một hộp có vị trí từ đầu là B [i]. Chúng ta phải tìm hàng và cột của các hộp tương ứng với mỗi B [i].
Vì vậy, nếu đầu vào là A =[3, 4, 5, 6], B =[1, 3, 5, 2], thì đầu ra sẽ là [(1, 1), (1, 3), ( 2, 2), (1, 2)] là B [0] =1, thì vị trí hộp sẽ là hàng thứ nhất, cột thứ nhất B [1] =3, sau đó vị trí hộp sẽ là hàng thứ nhất, cột thứ 3, B [2] =5, thì vị trí hộp sẽ là hàng thứ 2, cột thứ 2, B [3] =2, sau đó vị trí hộp sẽ là hàng thứ nhất, cột thứ 2
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
len_a:=kích thước của A
-
len_b:=kích thước của B
-
đối với tôi trong phạm vi 1 đến len_a, thực hiện
-
A [i]:=A [i] + A [i - 1]
-
-
đối với tôi trong phạm vi từ 0 đến len_b, thực hiện
-
row:=một chỉ mục mà chúng ta có thể chèn B [i] để duy trì A được sắp xếp
-
nếu hàng> =1, thì
-
box_num:=B [i] - A [row - 1]
-
-
nếu không,
-
box_num:=B [i]
-
-
hiển thị một cặp (hàng + 1, box_num)
-
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
import bisect def get_position(A, B): len_a = len(A) len_b = len(B) for i in range(1, len_a): A[i] += A[i - 1] for i in range(len_b): row = bisect.bisect_left(A, B[i]) if row >= 1: box_num = B[i] - A[row - 1] else: box_num = B[i] print ((row + 1, box_num)) A = [3, 4, 5, 6] B = [1, 3, 5, 2] get_position(A, B)
Đầu vào
[3, 4, 5, 6], [1, 3, 5, 2]
Đầu ra
(1, 1) (1, 3) (2, 2) (1, 2)