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