CCF 202012-5 星际旅行 使用树状数组,测试样例可以通过,0分

from copy import deepcopy
import math

# e.g. lowbit = [0, 1, 2, 1, 4, 1, 2, 1, 8, 1, 2, 1, 4, 1, 2, 1, 16, 1, 2, 1, 4, 1, 2, 1, 8, 1, 2, 1, 4, 1, 2, 1, 32]
lowbit = [num & -num for num in range(1000000)]


def sum(var):
    x, y, z = 0, 0, 0
    while var > 0:
        x += C[var][0]
        y += C[var][1]
        z += C[var][2]
        var -= lowbit[var]
    return x, y, z


def add(l, r, a, b, c):
    for i in range(l, r + 1):
        A[i][0] += a
        A[i][1] += b
        A[i][2] += c
        j = i
        while j <= N:
            C[j][0] += a
            C[j][1] += b
            C[j][2] += c
            j += lowbit[j]


def multiply(l, r, k):
    for i in range(l, r + 1):
        A[i] = [_ * k for _ in A[i]]
        j = i
        while j <= N:
            C[j][0] = C[j][0] + A[i][0] / k * ( k - 1)
            C[j][1] = C[j][1] + A[i][1] / k * ( k - 1)
            C[j][2] = C[j][2] + A[i][2] / k * ( k - 1)
            j += lowbit[j]


def transpose(l, r):
    for i in range(l, r + 1):
        P = deepcopy(A[i])
        A[i][0], A[i][1], A[i][2] = A[i][1], A[i][2], A[i][0]
        j = i
        while j <= N:
            C[j][0] = C[j][0] - P[0] + A[i][0]
            C[j][1] = C[j][1] - P[1] + A[i][1]
            C[j][2] = C[j][2] - P[2] + A[i][2]
            j += lowbit[j]


if __name__ == '__main__':
    N, M = list(map(int, input().split()))
    # 初始化A数组 C数组的值
    A = [[0, 0, 0] for i in range(N + 1)]
    C = [[0, 0, 0] for i in range(N + 1)]

    for i in range(M):
        slist = list(map(int, input().split()))
        opt = slist[0]
        if opt == 1:  # 代表这次操作需要将第l个数到第r个数中v的倍数除以v
            l, r, a, b, c = slist[1], slist[2], slist[3], slist[4], slist[5]
            add(l, r, a, b, c)
        elif opt == 2:
            l, r, k = slist[1], slist[2], slist[3]
            multiply(l, r, k)
        elif opt == 3:
            l, r = slist[1], slist[2]
            transpose(l, r)
        else:
            l, r = slist[1], slist[2]
            x1, y1, z1 = sum(r)
            x2, y2, z2 = sum(l - 1)
            x, y, z = x1 - x2, y1 - y2, z1 - z2
            print(int(math.pow(x, 2) + math.pow(y, 2) + math.pow(z, 2)) % 1000000007)

 

问题在于:print(int(math.pow(x, 2) + math.pow(y, 2) + math.pow(z, 2)) % 1000000007)

应该使用x * x 而不是 math.pow(x, 2)

你好,我是有问必答小助手。为了技术专家团更好地为您解答问题,烦请您补充下(1)问题背景详情,(2)您想解决的具体问题,(3)问题相关代码图片或者报错信息。便于技术专家团更好地理解问题,并给出解决方案。

您可以点击问题下方的【编辑】,进行补充修改问题。