মনে করুন deli নামক একটি অ্যারে আছে যেখানে deli[i] হলো i-তম খাদ্যের স্বাদ쁣তা। আমাদের এই লিস্ট থেকে কতগুলো ভিন্ন 'ভালো মীਲ' তৈরি করা যায় তা বের করতে হবে। উত্তর বড় হলে 10^9 + 7 দিয়ে মডুলো রিটার্ন করুন। এখানে 'ভালো মী্ল' বলতে দুটি ভিন্ন খাদ্য আইটেম যাঁর স্বাদ쁣তার যোগফল ২-এর ঘাত হবে সেটাকে বোঝায়। আমরা যেকোনো দুটি ভিন্ন খাদ্য সিলেক্ট করে ভালো মী্ল বানাতে পারি।
যেমন, ইনপুট deli = [1,7,3,6,5] হলে, আউটপুট হবে ৩ কারণ আমরা (1,3), (1,7) এবং (3,5) জোড়া বানাতে পারি যাদের যোগফল ২-এর ঘাত।
সমাধান পদ্ধতি
এই সমস্যাটি সমাধান করতে নিচের ধাপগুলো অনুসরণ করুন:
- m := 10^9 + 7
- count := প্রতিটি স্বাদ쁣তা মান ফ্রিকোয়েন্সি ধারণকারী একটি ম্যাপ
- ans := 0
- count-এ থাকা প্রতিটি i আইটেমের জন্য
- n = 0 থেকে 21 পর্যন্ত
- j := (2^n) - i
- যদি j count-এ থাকে, তবে
- যদি i == j হয়, তবে
- ans := ans + count[i] * (count[i]-1)
- অন্যথায়,
- ans := ans + count[i] * count[j]
- যদি i == j হয়, তবে
- n = 0 থেকে 21 পর্যন্ত
- return (ans // 2) % 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<ইনপুট
[1,7,3,6,5]আউটপুট
3