解题思路:
很多人提交这题都错了,相信还不知道为什么,大部分人是排序后减小的,加大的;
错就除了如果只要有一个负号,负数也可以全部变成正数然后相加的,不理解看接下来我举得例子
2 2
-1 -2 -3 -4 - 5
我们可以写成-1-((-2)+(-3)+(-4))-(-5)
是不是只要一个负号就可以得除最大值,懂了没有;如果按大部分人的思路的话,这题
会这么运算-1-(-5)-(-4)+(-2)+(-3);
所以这题解分为两种情况,
1.无负号,就把输入的数全加起来
2.有负号
除了上述说的,还有一种情况,即使都数字大部分都是正数,但是因为负负得正,两个负号也可以变成正号,奇数个负号只用减一次即可,:有加号有负号,无论你怎么输入,我们都可以拿最大值减去最小值然后加上剩下数的绝对值即可,为什么呢?负负得正是关键点
细看点击链接 http://t.csdn.cn/oDhUB
参考代码:
#includeusing namespace std; #define ll long long int a[200009]; int main() { int n, m; cin >> n >> m; int N = n + m + 1; ll sum = 0; for (int i = 0; i < N; i++) cin >> a[i]; //当没有减号的时候直接相加 if (m == 0) { for (int i = 0; i < n + m + 1; i++) { sum += a[i]; } } else { sort(a, a + N); sum = a[N - 1] - a[0]; for (int i = 1; i < N - 1; i++) sum += abs(a[i]); }cout << sum << endl; return 0; }
0.0分
9 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复