原题链接:蓝桥杯算法提高VIP-分苹果
解题思路:
言归正传,所谓差分数组,就是说假设有两个数组d[i],a[i],d[i]=a[i]-a[i-1],d[0]=a[0],那么d[i]就是a[i]的差分数组,d[i]的前缀和就是a[i],即a[i]=d[i]+d[i-1]+...+d[0];
本题中,发苹果的方式是连续的,那么每次改变的差分数组只有d[l]和d[r+1],连续m次,d[l]加上c,d[r+1]减去c,注意d[r+1]不要超出数组范围,所以我在申请数组d的时候多申请了一个空间。
注意事项:
参考代码:
#include <iostream> using namespace std; int main() { int n, m, i, j; cin >> n >> m; //int *L = new int[m]; //int *R = new int[m]; //int *C = new int[m]; int l, r, c; int *child = new int[n + 1]; int *diff = new int[n + 2]; child[0] = diff[0] = 0; for(i = 0; i < n+1; i++) { diff[i] = 0; } for (i = 0; i < m; i++) { cin >> l >> r >> c; diff[l] += c; diff[r + 1] -= c; } for (i = 1; i <= n; i++) { child[i] = child[i - 1] + diff[i]; cout << child[i] << " "; } return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复