解题思路:

思路参考的大佬的思路,采用了差分法。说一下自己对这个方法的理解。

①建立一个数组dis[n+2],里面存储的值是每个小朋友与上一个小朋友手里的苹果的差值,初始化值为0。

   每发一次苹果,

        dis[l] = dis[l] + c

        dis[r+1] = dis[r+1] - c

②假设此处每个小朋友手里的苹果用数组chd[]表示,初始化chd[1] = dis[1],

    由①可知,dis[i] = chd[i] - chd[i-1],

    从而得知,chd[i] = chd[i-1] + dis[i]

注意事项:

本题代码超时,只得了64分。代码时间复杂度和用c++写的应该是差不多O(m+n),个人感觉会超时可能是因为python列表查询速度慢的原因,目前还没有想到更好的解决方法,仅供参考,希望大家多多指点。

参考代码:

def f(n,m):  
    dis = [0 for i in range(n+2)]  
    chd = [0 for i in range(0,n+1)]  
  
    for i in range(m):  
        l,r,c = map(int,input().split())  
        dis[l] = dis[l] + c  
        dis[r+1] = dis[r+1] - c  
  
    chd[1] = dis[1]  
    for i in range(1,n+1):  
        chd[i] = chd[i-1] + dis[i]  
        print(chd[i],end = ' ')  
  
  
if __name__ == '__main__':  
    n,m = map(int,input().split())  
    f(n,m)


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论