ধরুন আমাদের নন-নেগেটিভ মান সহ nums নামে একটি অ্যারে আছে। আমাদের অ্যারেতে উপস্থিত সূচকের সংখ্যার চমৎকার জোড়া খুঁজে বের করতে হবে, যদি উত্তরটি খুব বড় হয়, তাহলে উত্তর 10^9+7 ফেরত দিন। এখানে একজোড়া সূচককে (i, j) চমৎকার বলা হয় যখন তারা এই সমস্ত শর্ত পূরণ করে:1. 0 <=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) +7
dic :=একটি খালি মানচিত্র, যার ডিফল্ট মান হল 0
প্রতিটি সংখ্যার জন্য, করুন
rev :=সংখ্যার বিপরীত
dic[সংখ্যা - রেভ] 1 দ্বারা বৃদ্ধি করুন
res:=0
dic-এর সমস্ত মানের তালিকায় প্রতিটি ভ্যালের জন্য, do
res :=res + (val*(val-1))/2
রিটার্ন res mod 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