ধরুন আমাদের একটি অ্যারে ডেলি আছে যেখানে ডেলি [i] হল ith খাবারের সুস্বাদু, আমাদের এই তালিকা থেকে বিভিন্ন ভাল খাবারের সংখ্যা খুঁজে বের করতে হবে। যদি উত্তরটি খুব বড় হয়, তাহলে ফলাফলের মডুলো 10^9 + 7 ফেরত দিন। এখানে একটি ভাল খাবার মানে এমন একটি খাবার যাতে ঠিক দুটি ভিন্ন খাদ্য আইটেম থাকে যার সমষ্টি সুস্বাদু যা দুটির শক্তি। একটি ভাল খাবার তৈরি করার জন্য আমরা যেকোনো দুটি ভিন্ন খাবার নির্বাচন করতে পারি।
সুতরাং, যদি ইনপুটটি deli =[1,7,3,6,5] এর মতো হয় তবে আউটপুট 3 হবে কারণ আমরা জোড়া (1,3), (1,7) এবং (3,5) তৈরি করতে পারি যার যোগফল হল 2 এর শক্তি।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- m :=10^9 + 7
- গণনা :=প্রতিটি সুস্বাদু মানগুলির ফ্রিকোয়েন্সি ধারণকারী একটি মানচিত্র
- উত্তর :=0
- প্রতিটি আইটেমের জন্য আমি গণনা করি, কর
- 0 থেকে 21 রেঞ্জের মধ্যে n এর জন্য, করুন
- j:=(2^n) - i
- যদি j গণনায় থাকে, তাহলে
- যদি i j এর মত হয়, তাহলে
- উত্তর :=উত্তর + গণনা[i] *(গণনা[i]-1)
- অন্যথায়,
- উত্তর :=উত্তর + গণনা[i] * গণনা[j]
- যদি i j এর মত হয়, তাহলে
- 0 থেকে 21 রেঞ্জের মধ্যে n এর জন্য, করুন
- (ans/2) mod m এর ভাগফল ফেরত
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
from collections import Counter def solve(deli): m = 10**9 + 7 count = Counter(deli) ans = 0 for i in count: for n in range(22): j = (1<<n)-i if j in count: if i == j: ans += count[i] * (count[i]-1) else: ans += count[i] * count[j] return (ans // 2) % m deli = [1,7,3,6,5] print(solve(deli))
ইনপুট
[1,7,3,6,5]
আউটপুট
3