解题思路:
很多人提交这题都错了,相信还不知道为什么,大部分人是排序后减小的,加大的;
错就除了如果只要有一个负号,负数也可以全部变成正数然后相加的,不理解看接下来我举得例子
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 人评分
2005年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:647 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:672 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:537 |
1035 题解浏览:779 |
A+B for Input-Output Practice (IV) (C语言代码)浏览:503 |
分解质因数 (C++代码)浏览:1471 |
【计算两点间的距离】 (C语言代码)浏览:844 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:427 |
C二级辅导-统计字符 (C语言描述——用函数求解)浏览:1178 |
核桃的数量 (C语言代码)浏览:825 |
1024 2023-01-14 18:15:13 |
4+3-(1-2)=8