मान लीजिए कि हमारे पास दो सरणियाँ A और B हैं। A का आकार पंक्तियों की संख्या है और A[i] ith पंक्ति में बक्सों की संख्या है। और बी गेंदों की सरणी है जहां बी [i] गेंद पर एक संख्या को दर्शाता है। यह देखते हुए कि गेंद i (मान B[i]) को एक बॉक्स में रखा जाएगा, जिसकी शुरुआत से स्थिति B[i] है। हमें प्रत्येक B[i] के संगत बक्सों की पंक्ति और स्तंभ ज्ञात करना है।
इसलिए, यदि इनपुट ए =[3, 4, 5, 6], बी =[1, 3, 5, 2] जैसा है, तो आउटपुट [(1, 1), (1, 3), ( 2, 2, (1, 2)] के रूप में बी [0] =1, फिर बॉक्स की स्थिति पहली पंक्ति, 1 कॉलम बी [1] =3 होगी, फिर बॉक्स की स्थिति पहली पंक्ति, तीसरी कॉलम, बी होगी। [2] =5, फिर बॉक्स की स्थिति दूसरी पंक्ति, दूसरा कॉलम, बी [3] =2 होगी, फिर बॉक्स की स्थिति पहली पंक्ति, दूसरी कॉलम होगी
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
len_a :=A का आकार
-
len_b :=B का आकार
-
मेरे लिए 1 से len_a की श्रेणी में, करें
-
ए[i] :=ए[i] + ए[i - 1]
-
-
मेरे लिए 0 से len_b की सीमा में, ऐसा करें
-
पंक्ति :=एक अनुक्रमणिका जहाँ हम A क्रमबद्ध बनाए रखने के लिए B[i] सम्मिलित कर सकते हैं
-
अगर पंक्ति>=1, तो
-
box_num :=B[i] - A[row - 1]
-
-
अन्यथा,
-
box_num :=B[i]
-
-
एक जोड़ी प्रदर्शित करें (पंक्ति + 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)
इनपुट
[3, 4, 5, 6], [1, 3, 5, 2]
आउटपुट
(1, 1) (1, 3) (2, 2) (1, 2)