মানবিক সংখ্যাগুলো ধারণকারী একটি লিস্ট দেওয়া আছে। এখন সেই লিস্ট থেকে যেসব সংখ্যার বাইনারি রিপ্রেজেন্টেশনে দুটি কমপ্যাক্ট ১ থাকে, সেগুলো বাদ দিয়ে একটি নতুন লিস্ট Z তৈরি করা হয়। আবার একটি 'input_list' দেওয়া থাকে যাতে কিছু পূর্ণসংখ্যা মান থাকে। আমাদের Z লিস্ট থেকে那些指定 indexes-এ থাকা উপাদানগুলোর XOR মান বের করতে হবে।
যেমন, যদি input_list = [3, 4, 5] হয়, তবে আউটপুট হবে 9।
Z-র ৩, ৪, এবং ৫ নম্বর ইন্ডেক্সে মানগুলো হল ৪, ৫, এবং ৮। সুতরাং, ৪ XOR ৫ XOR ৮ = ৯।
সমাধানের ধাপসমূহ
- zeck_num() ফাংশন সংজ্ঞায়িত করুন। এটি k, f_list গ্রহণ করবে:
- res := 0
- i = (f_list এর আকার - 1) থেকে -1 পর্যন্ত ১ করে কমিয়ে যান:
- যদি k >= f_list[i] হয়, তবে:
- res := res + 2^i
- k := k - f_list[i]
- যদি k >= f_list[i] হয়, তবে:
- res ফেরত দিন
- MOD := 10^9 + 7
- max_val := 10^18
- f_list := [1, 2] মান সহ একটি নতুন লিস্ট
- f_list-এর শেষ উপাদান <= max_val থাকার동안:
- f_list-এর শেষ দুটি উপাদানের যোগফল f_list-এর শেষে যোগ করুন
- res := 0
- input_list-এর প্রতিটি index-এর জন্য:
- res := res XOR zeck_num(index, f_list)
- res mod MOD ফেরত দিন
উদাহরণ
def zeck_num(k, f_list):
res = 0
for i in range(len(f_list)-1, -1, -1):
if k >= f_list[i]:
res += 2**i
k -= f_list[i]
return res
def solve(input_list):
MOD = 10**9 + 7
max_val = 10**18
f_list = [1, 2]
while f_list[-1] <= max_val:
f_list.append(f_list[-1] + f_list[-2])
res = 0
for index in input_list:
res ^= zeck_num(index, f_list)
return res % MOD
print(solve([3, 4, 5]))
ইনপুট
[3, 4, 5]
আউটপুট
9