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

Python-এ সব সেগমেন্টের XOR শূন্য করার প্রোগ্রাম


মনে করুন nums নামে একটি অ্যারে এবং k নামে আরেকটি মান আছে। একটি সেগমেন্ট [left, right] (left <= right)-এর XOR হল সকল এলিমেন্টের XOR যাদের ইন্ডেক্স left এবং right-এর মধ্যভাগে (ইনক্লুসিভ)।

আমাদের অ্যারেতে ন্যূনতম কতগুলো এলিমেন্ট পরিবর্তন করতে হবে যাতে আকার k-এর সব সেগমেন্টের XOR শূন্য হয় তা বের করতে হবে।

সুতরাং, যদি ইনপুট হয় nums = [3,4,5,2,1,7,3,4,7], k = 3, তবে আউটপুট হবে 3 কারণ আমরা ইন্ডেক্স 2, 3, 4-এ এলিমেন্টগুলো মডিফাই করে অ্যারেটি [3,4,7,3,4,7,3,4,7] বানাতে পারি।

এটি সমাধান করতে আমরা নিচের ধাপগুলো অনুসরণ করব −

  • LIMIT := 1024

  • temp := LIMIT x k আকারের একটি অ্যারে 0 দিয়ে পূরণ

  • nums-এ প্রতিটি ইন্ডেক্স i এবং মান x-এর জন্য, করুন

    • temp[i mod k, x] := temp[i mod k, x] + 1

  • dp := LIMIT আকারের একটি অ্যারে -2000 দিয়ে পূরণ

  • dp[0] := 0

  • temp-এ প্রতিটি row-এর জন্য, করুন

    • maxprev := dp-এর সর্বোচ্চ

    • new_dp := LIMIT আকারের একটি অ্যারে maxprev দিয়ে পূরণ

    • row-এ প্রতিটি ইন্ডেক্স i এবং মান cnt-এর জন্য, করুন

      • যদি cnt > 0 হয়, তবে

        • dp-এ প্রতিটি ইন্ডেক্স j এবং মান prev-এর জন্য, করুন

          • new_dp[i XOR j] := new_dp[i XOR j] এবং prev+cnt-এর মধ্যে সর্বোচ্চ

    • dp := new_dp

  • nums-এর আকার - new_dp[0] রিটার্ন করুন

উদাহরণ

বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশন দেখুন

def solve(nums, k):
    LIMIT = 2**10
    temp = [[0 for _ in range(LIMIT)] for _ in range(k)]
    for i,x in enumerate(nums):
        temp[i%k][x] += 1
    dp = [-2000 for _ in range(LIMIT)]
    dp[0] = 0
    for row in temp:
        maxprev = max(dp)
        new_dp = [maxprev for _ in range(LIMIT)]
        for i,cnt in enumerate(row):
            if cnt > 0:
                for j,prev in enumerate(dp):
                    new_dp[i^j] = max(new_dp[i^j], prev+cnt)
        dp = new_dp
    return len(nums) - new_dp[0]

nums = [3,4,5,2,1,7,3,4,7]
k = 3
print(solve(nums, k))

ইনপুট

[3,4,5,2,1,7,3,4,7], 3

আউটপুট

-9

  1. পাইথনে ইন্ডিয়ান ফ্ল্যাগ (ভারতীয় পতাকা) আঁকা

  2. পাইথনে অ্যারে সব উপাদান সমান করার জন্য অপারেশনের সংখ্যা

  3. পাইথন প্রোগ্রাম ডিকশনারির সব আইটেমের যোগফল বের করা

  4. পাইথনে লিস্টের সব সংখ্যা গুণফল বের করার প্রোগ্রাম