Python程式:查詢生成列表中特定元素的異或值
假設我們得到一個包含自然數的列表。現在,從該列表中移除所有二進位制表示中包含兩個連續1的數字,並生成另一個名為Z的列表。現在,我們得到另一個包含一些整數值的列表“input_list”。我們需要找出Z中指定元素的異或值,這些元素的索引在input_list中指定。
因此,如果輸入類似於input_list = [3, 4, 5],則輸出將為9。
在Z的索引3、4和5處;值分別為4、5和8。所以,4 XOR 5 XOR 8 = 9。
為了解決這個問題,我們將遵循以下步驟:
- 定義一個函式zeck_num()。這將獲取k和f_list作為引數。
- res := 0
- 對於範圍從(f_list的大小 - 1)到-1的i,遞減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的倒數第二個元素插入到f_list的末尾
- res := 0
- 對於input_list中的每個索引,執行以下操作:
- 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
廣告