ধরুন আমাদের কাছে সংখ্যার একটি তালিকা আছে যার নাম nums এবং আরেকটি মান k। আমাদের k বার অপারেশন করতে হবে:তালিকায় যে কোনো সংখ্যা নির্বাচন করুন। সেই সংখ্যার বাইনারি উপস্থাপনায়, একটি বিট নির্বাচন করুন যা 0 এবং এটিকে 1 করুন। অবশেষে, k অপারেশন করার পরে আমাদের সমস্ত সংখ্যার ন্যূনতম সম্ভাব্য যোগফল ফেরত দিতে হবে। উত্তর খুব বেশি হলে, ফলাফল মোড 10^9+7.
ফেরত দিনসুতরাং, ইনপুট যদি nums =[4, 7, 3] k =2 এর মত হয়, তাহলে আউটপুট হবে 17, যেহেতু 4-এর বাইনারি উপস্থাপনা হল 100, 3 হল 011, এবং 7 হল 111। যেহেতু আমাদের সেট করতে হবে। 2 বিট, আমরা এটিকে 111 (7) করতে 4 এর বিট সেট করতে পারি। তাহলে মোট যোগফল হল 7 + 7 + 3 =17।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব:
-
উত্তর :=0, i :=0
-
যখন k অ-শূন্য, কর
-
প্রতিটি n সংখ্যার জন্য, করুন
-
যদি (n / 2^i) জোড় হয়, তাহলে
-
উত্তর :=ans + 2^i
-
k :=k - 1
-
k যদি 0 এর সমান হয়, তাহলে
-
লুপ থেকে বেরিয়ে আসুন
-
-
-
-
i :=i + 1
-
-
রিটার্ন (উত্তর + সংখ্যার সমস্ত উপাদানের যোগফল) mod m
আরও ভালভাবে বোঝার জন্য আসুন নিম্নলিখিত বাস্তবায়ন দেখি:
উদাহরণ
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