在Python中找给定数字列表的所有查询的kpr sum的程序
假设我们有一个数字列表nums。我们还有一个查询列表,其中queries [i]包含三个元素[k,p,r],对于每个查询,我们都必须找到kpr_sum。kpr_sum的公式如下。
如果和太大,那么返回和模10 ^ 9 + 7。
因此,如果输入如下nums = [1,2,3] queries = [[1,1,3],[2,1,3]],则输出将是[5,4],因为第一个元素是(1 XOR(1 XOR 2))+(1 XOR(1 XOR 3))+(1 XOR(2 XOR 3)) = 5,类似地,对于第二个查询,它是4。
要解决此问题,我们将遵循以下步骤−
- m:= 10^9 + 7
- N:= nums的大小
- q_cnt:=查询的大小
- C:=新列表
- res:=新列表
- 对于i在0到19的范围内,执行以下操作 –
- R:=具有单个元素0的数组
- t:=0
- 对于nums中的每个x,执行以下操作 –
- t:= t + (在右移i次后的x) AND 1
- 将t插入R的末尾
- 将R插入C的末尾
- 对于j在0到q_cnt的范围内,执行以下操作 –
- (K,P,R):=查询[j]
- d:= R-P + 1
- t:= 0
- 对于i在0到19的范围内,执行以下操作 –
- n1:= C [i,R] -C [i,P-1]
- n0:= d – n1
- 如果(K在右移i次后)AND 1为非零,则 –
- x:= (n1 *(n1-1)+ n0 *(n0-1))/ 2的商
- 否则,
- x:= n1 * n0
- t:=(t +(在左移i次后的x))mod m
- 将t插入res的末尾
- 返回res
例子
让我们看一下以下实现,以更好地了解−