ধরুন আমাদের দুটি অ্যারে সংখ্যা 1 এবং সংখ্যা 2 আছে, আমাদের এই দুটি নিয়ম অনুসরণ করে গঠিত ট্রিপলেট (টাইপ 1 এবং টাইপ 2) খুঁজে বের করতে হবে -
- ট্রিপলেট (i, j, k) যদি nums1[i]^2 =nums2[j] * nums2[k] যেখানে [0 <=i
- ট্রিপলেট (i, j, k) যদি nums2[i]^2 =nums1[j] * nums1[k] যেখানে [0 <=i <সংখ্যার আকার 2 এবং 0 <=j
- ট্রিপলেট (i, j, k) যদি nums2[i]^2 =nums1[j] * nums1[k] যেখানে [0 <=i <সংখ্যার আকার 2 এবং 0 <=j
সুতরাং, যদি ইনপুটটি nums1 =[7,4] nums2 =[5,2,8,9] এর মত হয়, তাহলে আউটপুট হবে 1 কারণ সেখানে টাইপ 1, (1,1,2), সংখ্যা 1 এর একটি ট্রিপলেট রয়েছে। [1]^2 =সংখ্যা2[1] * সংখ্যা2[2] =(16 =2*8)।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব:
- cnt1 :=প্রতিটি উপাদান ধরে রাখার জন্য একটি মানচিত্র এবং এর সংখ্যা1
- cnt2 :=প্রতিটি উপাদান এবং এর সংখ্যা 2 ধরে রাখার জন্য একটি মানচিত্র
- একটি ফাংশন triplets() সংজ্ঞায়িত করুন। এটি arr1, arr2 লাগবে
- উত্তর :=0
- প্রতিটি t, v এর জন্য arr1 এর আইটেম() তে, করুন
- k :=arr2[t] যদি এটি থাকে, অন্যথায় 0
- tmp :=k*(k - 1) / 2
- sq :=t * t
- arr2 তে প্রতিটি m জন্য, করুন
- যদি m
- tmp :=tmp + (arr2[m] যদি থাকে, অন্যথায় 0) * (arr2[sq/m এর ভাগফল] যদি থাকে, অন্যথায় 0)
- যদি m
উদাহরণ
আসুন আরও ভাল বোঝার জন্য নিম্নলিখিত বাস্তবায়ন দেখি—
from collections import Counter def solve(nums1, nums2): cnt1 = Counter(nums1) cnt2 = Counter(nums2) def triplets(arr1, arr2): ans = 0 for t, v in arr1.items(): k = arr2.get(t, 0) tmp = k * (k - 1) // 2 sq = t * t for m in arr2: if m < t and sq % m == 0: tmp += arr2.get(m, 0) * arr2.get(sq // m, 0) ans += tmp * v return ans return triplets(cnt1, cnt2) + triplets(cnt2, cnt1) nums1 = [7,4] nums2 = [5,2,8,9] print(solve(nums1, nums2))
ইনপুট
[7,4],[5,2,8,9]
আউটপুট
2