কম্পিউটার টিউটোরিয়াল

পাইথনে ০ কে ১ বদলে কি বার অপারেশন করে ন্যূনতম সম্ভাব্য যোগফল বের করার প্রোগ্রাম

ধরা যাক nums নামক একটি সংখ্যার লিস্ট এবং অন্য একটি মান k দেওয়া আছে। আমাদের নিচের অপারেশন k বার করতে হবে: লিস্ট থেকে যেকোনো একটি সংখ্যা বেছে নিন। সেটির বাইনারি রিপ্রেজেন্টেশনে যেকোনো একটি ০ বিট বেছে নিন এবং সেটিকে ১ করুন। সব অপারেশন শেষে সব সংখ্যার ন্যূনতম সম্ভাব্য যোগফল ফেরত দিন। যদি উত্তর খুব বড় হয়, তবে 10^9+7 দিয়ে মডুলো করে ফলাফল দিন।

উদাহরণ

ইনপুট: nums = [4, 7, 3], k = 2

আউটপুট: 17

ব্যাখ্যা: ৪-এর বাইনারি 100, ৩-এর 011, ৭-এর 111। ২টি বিট সেট করতে হবে। ৪-এর দুটি ০ বিট ১ করলে সেটি ৭ হয়ে যায়। মোট যোগফল: 7 + 7 + 3 = 17।

সমাধানের ধাপসমূহ

  1. ans := 0, i := 0
  2. <লি>k নন-জিরো থাকতে বাকি থাকা পর্যন্ত:
    • প্রতিটি n এর জন্য nums-এ:
      • যদি (n >> i) & 1 == 0 (অর্থাৎ i-তম বিট ০) হয়, তবে:
        • ans += 1 << i
        • k -= 1
        • যদি k == 0 হয়, তবে লুপ থেকে বের হোন
    • i += 1
  3. (ans + sum(nums)) % (10**9+7) ফেরত দিন

পাইথন ইমপ্লিমেন্টেশন

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
  1. লিস্টের কিউমুলেটিভ সাম বের করার পাইথন প্রোগ্রাম

  2. পাইথনে লিস্টের এলিমেন্টগুলোর যোগফল বের করা

  3. পাইথনে লিস্ট থেকে N বড় এলিমেন্ট বের করা

  4. Python-এ সংখ্যাগুলোর লিস্টের যোগফল (Sum) বের করা