ধরুন আমাদের কাছে সংখ্যা 1 এবং 2 সংখ্যার দুটি তালিকা রয়েছে। এবং নিম্ন এবং উপরের দুটি সংখ্যা আছে। আমাদের জোড়ার সংখ্যা (i, j) খুঁজে বের করতে হবে যেমন নিম্ন ≤ nums1[i]^2 + nums2[j]^2 ≤ উপরের।
সুতরাং, ইনপুট যদি nums1 =[5, 3, 2] nums2 =[8, 12, 6] Lower =10 upper =50 এর মত হয়, তাহলে আউটপুট হবে 2 কারণ জোড়াগুলো (1, 2) এর মত এবং ( 2, 2)
- 10 <=3^2 + 6^2 <<50 =10 <=45 <<50
- 10 <=2^2 + 6^2 <<50 =10 <=40 <<50
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- প্রতিটি উপাদানকে তার বর্গাকার সংখ্যা 1 দিয়ে প্রতিস্থাপন করুন
- প্রতিটি উপাদানকে তার বর্গ সংখ্যা 2 দিয়ে প্রতিস্থাপন করুন
- n :=সংখ্যা1 এর আকার
- m :=সংখ্যা 2 এর আকার
- যদি n> m হয়, তাহলে
- সংখ্যা 1 এবং সংখ্যা2 অদলবদল করুন
- n এবং m অদলবদল করুন
- সংখ্যা2 :=তালিকা সংখ্যা2 সাজান
- res :=0
- সংখ্যা1 এ প্রতিটি e1 এর জন্য, করুন
- st :=সংখ্যা 2 তে (নিম্ন - e1) সন্নিবেশ করার জন্য সর্বাধিক অবস্থান বাম যাতে উপাদানগুলি সাজানো হয়
- en :=nums2 তে (উপরের - e1) সন্নিবেশ করার জন্য সবচেয়ে সঠিক অবস্থান যাতে উপাদানগুলি সাজানো হয়
- গণনা :=en - st
- res :=res + count
- রিটার্ন রিটার্ন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
from bisect import bisect_left, bisect_right def solve(nums1, nums2, lower, upper): nums1 = [i * i for i in nums1] nums2 = [i * i for i in nums2] n, m = len(nums1), len(nums2) if n > m: nums1, nums2 = nums2, nums1 n, m = m, n nums2 = sorted(nums2) res = 0 for e1 in nums1: st = bisect_left(nums2, lower - e1) en = bisect_right(nums2, upper - e1) count = en - st res += count return res nums1 = [5, 3, 2] nums2 = [8, 12, 6] lower = 10 upper = 50 print(solve(nums1, nums2, lower, upper))
ইনপুট
[5, 3, 2], [8, 12, 6], 10, 50
আউটপুট
2