সমস্যা বিবরণ
দুটি অ্যারে A এবং B দেওয়া আছে। A-এর আকার = সারি সংখ্যা, A[i] = i-তম সারিতে বক্সের সংখ্যা। B = বอลের অ্যারে, B[i] = বলের নম্বর। বল i (মান B[i]) সেটি বক্সে যাবে যেটির পজিশন শুরু থেকে B[i]। প্রতিটি B[i]-এর জন্য সারি ও কলাম বের করতে হবে।
উদাহরণস্বরূপ, A=[3,4,5,6], B=[1,3,5,2] হলে আউটপুট [(1,1), (1,3), (2,2), (1,2)]।
সমাধানের ধাপসমূহ
A-কে প্রিফিক্স সম অ্যারে বানান (সারিগুলোর কিউমুলেটিভ বক্স সংখ্যা)।- প্রতিটি
B[i]এর জন্য:bisect_left(A, B[i])দিয়ে সারি নম্বরrowবের করুন।- যদি
row >= 1হয়,box_num = B[i] - A[row-1]। - অন্যথায়
box_num = B[i]। - আউটপুট
(row+1, box_num)।
পাইথন কোড উদাহরণ
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)
# আউটপুট: (1, 1) (1, 3) (2, 2) (1, 2)
ইনপুট
[3, 4, 5, 6], [1, 3, 5, 2]
আউটপুট
(1, 1) (1, 3) (2, 2) (1, 2)