头像

J.D

ssr




离线:14小时前


最近来访(3)
用户头像
cdy
用户头像
yqq


J.D
17小时前

python3 模板式解法

python3

def insert(b, x1, y1, x2, y2, c):
    b[x1][y1] += c
    b[x2 + 1][y1] -= c
    b[x1][y2 + 1] -= c
    b[x2 + 1][y2 + 1] += c


if __name__ == "__main__":
    n, m, q = map(int, input().split()) # 读取输入

    a = [[0 for _ in range(m+2)] for _ in range(n+2)] # 创建空前缀和a数组
    b = [[0 for _ in range(m+2)] for _ in range(n+2)] # 创建差分空b数组

    for i in range(1, n+1):
        a[i] = [0] + list(map(int, input().split())) + [0] # 读取a,前后首位置0留空

    for i in range(1, n+1):
        for j in range(1, m+1):
            insert(b, i, j, i, j, a[i][j]) # 通过模板计算a的差分数据集b

    for _ in range(q):
        x1, y1, x2, y2, c = map(int, input().split()) # 读取每次变化的输入
        insert(b, x1, y1, x2, y2, c) # 进行修改变化

    for i in range(1, n+1):
        for j in range(1, m+1):
            a[i][j] = a[i][j-1] + a[i-1][j] - a[i-1][j-1] + b[i][j] # 求前缀和,由于b是差分结果,输出是要再进行前缀和计算

    for i in range(1, n+1):
        print(' '.join([str(x) for x in a[i]][1:-1])) # 打印输出



活动打卡代码 AcWing 798. 差分矩阵

J.D
17小时前
# python3 差分矩阵打卡。

def insert(b, x1, y1, x2, y2, c):
    b[x1][y1] += c
    b[x2 + 1][y1] -= c
    b[x1][y2 + 1] -= c
    b[x2 + 1][y2 + 1] += c


if __name__ == "__main__":
    n, m, q = map(int, input().split()) # 读取输入

    a = [[0 for _ in range(m+2)] for _ in range(n+2)] # 创建空前缀和a数组
    b = [[0 for _ in range(m+2)] for _ in range(n+2)] # 创建差分空b数组

    for i in range(1, n+1):
        a[i] = [0] + list(map(int, input().split())) + [0] # 读取a,前后首位置0留空

    for i in range(1, n+1):
        for j in range(1, m+1):
            insert(b, i, j, i, j, a[i][j]) # 通过模板计算a的差分数据集b

    for _ in range(q):
        x1, y1, x2, y2, c = map(int, input().split()) # 读取每次变化的输入
        insert(b, x1, y1, x2, y2, c) # 进行修改变化

    for i in range(1, n+1):
        for j in range(1, m+1):
            a[i][j] = a[i][j-1] + a[i-1][j] - a[i-1][j-1] + b[i][j] # 求前缀和,由于b是差分结果,输出是要再进行前缀和计算

    for i in range(1, n+1):
        print(' '.join([str(x) for x in a[i]][1:-1])) # 打印输出



活动打卡代码 AcWing 797. 差分

J.D
1天前
该题是前缀和的逆,需要注意的是最终输出结果是经过m 次调整后数列的最终结果,所以只有一行。
相关步骤与代码的理解放在了注释中,供大家思考

python3 代码样例
def insert(q, l, r, c):
    # 模板公式插入操作
    q[l] += c
    q[r+1] -= c

n, m = map(int, input().split())
a = [0] + list(map(int, input().split())) # 增加前置0位置方便操作
b = [0] * (n+2) # 至少增加前后两个位置,前置0位置方便操作,后置0位置是模板r+1使用

for i in range(1, n+1):
    insert(b, i, i, a[i]) # 该操作会使得b是a的差分(前缀和的逆),由于l +c同时r+1 -c,减c的过程使b为差分结果

for _ in range(m):
    l, r, c = map(int, input().split())
    insert(b, l, r, c) #根据输入参数调整

for i in range(1, n+1):
    b[i] += b[i-1] #求前缀和

print(' '.join([str(x) for x in b][1:-1])) #输出经过m次调整后的结果




J.D
1天前

题目描述

该题是前缀和的逆,需要注意的是最终输出结果是经过m 次调整后数列的最终结果,所以只有一行。
相关步骤与代码的理解放在了注释中,供大家思考

python3 代码样例

def insert(q, l, r, c):
    # 模板公式插入操作
    q[l] += c
    q[r+1] -= c

n, m = map(int, input().split())
a = [0] + list(map(int, input().split())) # 增加前置0位置方便操作
b = [0] * (n+2) # 至少增加前后两个位置,前置0位置方便操作,后置0位置是模板r+1使用

for i in range(1, n+1):
    insert(b, i, i, a[i]) # 该操作会使得b是a的差分(前缀和的逆),由于l +c同时r+1 -c,减c的过程使b为差分结果

for _ in range(m):
    l, r, c = map(int, input().split())
    insert(b, l, r, c) #根据输入参数调整

for i in range(1, n+1):
    b[i] += b[i-1] #求前缀和

print(' '.join([str(x) for x in b][1:-1])) #输出经过m次调整后的结果



活动打卡代码 AcWing 796. 子矩阵的和

J.D
4天前
n, m, q = map(int, input().split())
a = s = [[0] * (m+1)] * (n+1)

for i in range(1, n+1):
    a[i] = [0] + list(map(int, input().split()))

for i in range(1, n+1):
    for j in range(1, m+1):
        s[i][j] = s[i-1][j] + s[i][j-1] - s[i-1][j-1] + a[i][j]

for _ in range(q):
    x1, y1, x2, y2 = map(int, input().split())
    result = s[x2][y2] - s[x1-1][y2] - s[x2][y1-1] + s[x1-1][y1-1]
    print(result)



J.D
4天前

核心处理逻辑还是记住s的公式,此外要注意行列m n的关系不要弄反了,否则经常报超过限制

python3 代码

n, m, q = map(int, input().split())
a = s = [[0] * (m+1)] * (n+1)

for i in range(1, n+1):
    a[i] = [0] + list(map(int, input().split()))

for i in range(1, n+1):
    for j in range(1, m+1):
        s[i][j] = s[i-1][j] + s[i][j-1] - s[i-1][j-1] + a[i][j]

for _ in range(q):
    x1, y1, x2, y2 = map(int, input().split())
    result = s[x2][y2] - s[x1-1][y2] - s[x2][y1-1] + s[x1-1][y1-1]
    print(result)


活动打卡代码 AcWing 795. 前缀和

J.D
5天前

前缀合

if __name__ == "__main__":
    length, params = map(int, input().split())
    a = list(map(int, input().split()))
    s = [0] * (length + 1)
    for i in range(length):
        s[i+1] = s[i] + a[i]
    for param in range(params):
        l, r = map(int, input().split())
        print(s[r] - s[l-1])


活动打卡代码 AcWing 796. 子矩阵的和

J.D
5天前

python3




活动打卡代码 AcWing 790. 数的三次方根

J.D
8天前
def find_cube_root(num):
    l, r = -10000,100000

    eps = 1e-8
    while r-l > eps:
        mid = (l + r) / 2
        if mid ** 3 >= num:
            r = mid
        else:
            l = mid
    return l 

if __name__ == "__main__":
    num = eval(input())
    result = find_cube_root(num)
    print('{:.6f}'.format(result))

作者:J.D
链接:https://www.acwing.com/solution/content/138379/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。



J.D
8天前

[//]: # 本题思路整体较简单,只需要注意 0.001的问题。如果按照 0-0.001中搜索的逻辑会出现无法覆盖到0.1的情况。

python3 方案

def find_cube_root(num):
    l, r = -10000,100000

    eps = 1e-8
    while r-l > eps:
        mid = (l + r) / 2
        if mid ** 3 >= num:
            r = mid
        else:
            l = mid
    return l 

if __name__ == "__main__":
    num = eval(input())
    result = find_cube_root(num)
    print('{:.6f}'.format(result))