ধরুন আমাদেরকে সংখ্যার সংখ্যার তালিকা দেওয়া হয়েছে। আমাদের বিদ্যমান চতুর্ভুজের সংখ্যা খুঁজে বের করতে হবে (a, b, c, d) যেমন a nums[d]।পি>
অ্যারে সংখ্যা হল পূর্ণসংখ্যা 1...N
এর একটি স্থানান্তরসুতরাং, ইনপুট যদি সংখ্যার মত হয় =[3, 4, 7, 6, 5], তাহলে আউটপুট হবে 5।
প্রদত্ত ইনপুট থেকে, আমাদের এই উল্টানো উল্টো −
আছে-
3, 4, 7, 6
-
3, 4, 6, 5
-
3, 4, 7, 5
-
3, 7, 6, 5
-
4, 7, 6, 5
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
m :=10^9 + 7
-
যদি সংখ্যার আকার <4, তাহলে
-
রিটার্ন 0
-
-
n :=সংখ্যার আকার
-
sorted_ds :=একটি নতুন তালিকা
-
sorted_ds
এ সংখ্যার শেষ আইটেমটি সন্নিবেশ করান -
তালিকা সাজান sorted_ds
-
ds_smaller_than_c :=[0] * n
-
n − 2 থেকে −1 পরিসরে c এর জন্য, 1 দ্বারা হ্রাস করুন, করুন
-
ds_smaller_than_c[c] :=sorted_ds-এ ডানদিকের অবস্থান ফেরত দিন যেখানে সংখ্যা[c] − 1 ঢোকানো যেতে পারে এবং সাজানো ক্রম বজায় রাখা যেতে পারে
-
sorted_ds
এর শেষে nums[c] সন্নিবেশ করান -
তালিকা সাজান sorted_ds
-
-
quadruplet_count :=0
-
sorted_as :=একটি নতুন তালিকা
-
sorted_as
-এ প্রথম সংখ্যার সংখ্যা সন্নিবেশ করান -
তালিকাটি sorted_as
সাজান -
as_smaller_than_b_sum :=0
-
1 থেকে n − 2 পরিসরে b এর জন্য, করুন
-
as_smaller_than_b_sum :=as_smaller_than_b_sum + ডানদিকের অবস্থানটি সংযোজিত_যেখানে সংখ্যা[b] – 1 ঢোকানো যেতে পারে এবং সাজানো ক্রম বজায় রাখা যেতে পারে
-
তালিকাটি sorted_as
সাজান -
as_smaller_than_b_sum :=as_smaller_than_b_sum mod m
-
sorted_as
এর শেষে nums[b] সন্নিবেশ করান -
তালিকাটি sorted_as
সাজান -
quadruplet_count :=quadruplet_count + as_smaller_than_b_sum *ds_smaller_than_c[b + 1]
-
quadruplet_count :=quadruplet_count mod m
-
-
quadruplet_count
ফেরত দিন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
import bisect MOD = 10 ** 9 + 7 class Solution: def solve(self, nums): if len(nums) < 4: return 0 n = len(nums) sorted_ds = list([nums[−1]]) sorted_ds.sort() ds_smaller_than_c = [0] * n for c in range(n − 2, −1, −1): ds_smaller_than_c[c] = bisect.bisect_right(sorted_ds, nums[c] − 1) sorted_ds.append(nums[c]) sorted_ds.sort() quadruplet_count = 0 sorted_as = list([nums[0]]) sorted_as.sort() as_smaller_than_b_sum = 0 for b in range(1, n − 2): as_smaller_than_b_sum += bisect.bisect_right(sorted_as, nums[b] − 1) sorted_as.sort() as_smaller_than_b_sum %= MOD sorted_as.append(nums[b]) sorted_as.sort() quadruplet_count += as_smaller_than_b_sum * ds_smaller_than_c[b + 1] quadruplet_count %= MOD return quadruplet_count ob = Solution() print(ob.solve([3, 4, 7, 6, 5]))
ইনপুট
[3, 4, 7, 6, 5]
আউটপুট
5