ধরা যাক nums নামক একটি সংখ্যার লিস্ট এবং অন্য একটি মান k দেওয়া আছে। আমাদের নিচের অপারেশন k বার করতে হবে: লিস্ট থেকে যেকোনো একটি সংখ্যা বেছে নিন। সেটির বাইনারি রিপ্রেজেন্টেশনে যেকোনো একটি ০ বিট বেছে নিন এবং সেটিকে ১ করুন। সব অপারেশন শেষে সব সংখ্যার ন্যূনতম সম্ভাব্য যোগফল ফেরত দিন। যদি উত্তর খুব বড় হয়, তবে 10^9+7 দিয়ে মডুলো করে ফলাফল দিন।
উদাহরণ
ইনপুট: nums = [4, 7, 3], k = 2
আউটপুট: 17
ব্যাখ্যা: ৪-এর বাইনারি 100, ৩-এর 011, ৭-এর 111। ২টি বিট সেট করতে হবে। ৪-এর দুটি ০ বিট ১ করলে সেটি ৭ হয়ে যায়। মোট যোগফল: 7 + 7 + 3 = 17।
সমাধানের ধাপসমূহ
ans := 0,i := 0
<লি>- প্রতিটি
nএর জন্যnums-এ:- যদি
(n >> i) & 1 == 0(অর্থাৎi-তম বিট ০) হয়, তবে:ans += 1 << ik -= 1- যদি
k == 0হয়, তবে লুপ থেকে বের হোন
- যদি
i += 1(ans + sum(nums)) % (10**9+7)ফেরত দিন
k নন-জিরো থাকতে বাকি থাকা পর্যন্ত:
পাইথন ইমপ্লিমেন্টেশন
class Solution:
def solve(self, nums, k):
m = (10 ** 9 + 7)
ans = 0
i = 0
while k:
for n in nums:
if (n >> i) & 1 == 0:
ans += 1 << i
k -= 1
if k == 0:
break
i += 1
return (ans + sum(nums)) % m
ob = Solution()
nums = [4, 7, 3]
k = 2
print(ob.solve(nums, k))
ইনপুট
[4, 7, 3], 2
আউটপুট
17