আমাদের একটি অ্যারে আছে nums যাতে নন-নেগেটিভ মান রয়েছে। আমাদের অ্যারেতে নাইস জোড়া ইন্ডেক্সের সংখ্যা বের করতে হবে, যদি উত্তর অনেক বড় হয় তবে 10^9+7 দিয়ে মডুলো করে রিটার্ন করুন। এখানে একটি ইন্ডেক্স জোড়া (i, j) নাইস বলা হয় যদি নিচের শর্তগুলো পূরণ করে:
0 ≤ i < j < nums-এর আকারnums[i] + rev(nums[j]) == nums[j] + rev(nums[i])
দ্রষ্টব্য - এখানে rev() শুধুমাত্র পজিটিভ অংশকে উল্টে দেয়, অর্থাৎ rev(564) = 465, কিন্তু rev(540) = 45।
উদাহরণস্বরূপ, ইনপুট nums = [97,2,42,11] হলে আউটপুট হবে 2 কারণ দুটি জোড়া রয়েছে (0,2) এবং (1,3), প্রথমটি জন্য [97 + rev(42) = 97+24 = 121, এবং 42 + rev(97) = 42 + 79 = 121] এবং দ্বিতীয়টি জন্য [2 + rev(11) = 2 + 11 = 13 এবং 11 + rev(2) = 13]।
সমাধানের ধাপসমূহ
m := (10^9) + 7dic := একটি খালি ম্যাপ, ডিফল্ট ভ্যালু 0nums-এর প্রতিটিnumএর জন্য:rev := num-এর উল্টোdic[num - rev] := dic[num - rev] + 1
res := 0dic-এর সব ভ্যালুvalএর জন্য:res := res + (val * (val-1)) // 2
res % mরিটার্ন করুন
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালোভাবে বুঝার জন্য:
from collections import defaultdict
def solve(nums):
m = (10**9) + 7
dic = defaultdict(int)
for num in nums:
rev = int(str(num)[::-1])
dic[num - rev] += 1
res = 0
for val in dic.values():
res += (val * (val - 1)) // 2
return res % m
nums = [97,2,42,11]
print(solve(nums)) ইনপুট
[97,2,42,11]
আউটপুট
2