ধরুন আমাদের nums নামে একটি অ্যারে আছে এবং আরেকটি মান k। একটি সেগমেন্টের XOR [বাম, ডান] (বাম <=ডান) হল সেই সমস্ত উপাদানগুলির XOR যার সূচকগুলি বাম এবং ডানের মধ্যে রয়েছে (সমেত)।
অ্যারেতে পরিবর্তন করার জন্য আমাদের ন্যূনতম সংখ্যক উপাদান খুঁজে বের করতে হবে যাতে 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]।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
সীমা :=1024
-
temp :=একটি অ্যারে তৈরি করুন যার আকার LIMIT x k, এবং 0
দিয়ে পূরণ করুন -
প্রতিটি সূচকের জন্য i এবং মান x সংখ্যায়, করুন
-
temp[i mod k, x] :=temp[i mod k, x] + 1
-
-
dp :=আকারের একটি অ্যারে LIMIT এবং -2000 দিয়ে পূরণ করুন
-
dp[0] :=0
-
তাপমাত্রায় প্রতিটি সারির জন্য, করুন
-
maxprev :=সর্বাধিক dp
-
new_dp :=আকারের একটি অ্যারে LIMIT এবং maxprev দিয়ে পূরণ করুন
-
প্রতিটি সূচক i এবং মান cnt সারির জন্য, করুন
-
যদি cnt> 0, তাহলে
-
প্রতিটি সূচকের জন্য j এবং dp-এ আগের মান, করুন
-
new_dp[i XOR j] :=সর্বাধিক new_dp[i XOR j] এবং prev+cnt
-
-
-
-
dp :=new_dp
-
-
সংখ্যার রিটার্ন সাইজ - new_dp[0>
উদাহরণ
আসুন আরও ভালভাবে বোঝার জন্য নিম্নলিখিত বাস্তবায়ন দেখি
def solve(nums, k):LIMIT =2**10 temp =[[0 for _ range(LIMIT)] এর জন্য _ in range(k)] এর জন্য i,x in enumerate(nums):temp[ i%k][x] +=1 dp =[-2000 এর জন্য _ রেঞ্জ(LIMIT)] dp[0] =0 টেম্পের সারির জন্য:maxprev =max(dp) new_dp =[maxprev _ এর মধ্যে _ এর মধ্যে(LIMIT) )] i,cnt in enumerate(সারিতে):যদি cnt> 0:j-এর জন্য, গণনা (dp) তে prev:new_dp[i^j] =max(new_dp[i^j], prev+cnt) dp =new_dp রিটার্ন লেন(সংখ্যা) - new_dp[0]সংখ্যা =[3,4,5,2,1,7,3,4,7]k =3প্রিন্ট(সল্ভ(সংখ্যা, কে))
ইনপুট
<প্রে>[3,4,5,2,1,7,3,4,7], 3আউটপুট
-9