解题思路:

很多人提交这题都错了,相信还不知道为什么,大部分人是排序后减小的,加大的;


错就除了如果只要有一个负号,负数也可以全部变成正数然后相加的,不理解看接下来我举得例子


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.0分

9 人评分

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

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

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

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

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

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

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

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

评论列表 共有 3 条评论

1024 2年前 回复TA
@巴特 4+3-(1-2)=8
巴特 2年前 回复TA
错误,输入
1 2
1 2 3 4
就不对,按照你的4-1+2+3=8,但是实际是4+3-2-1=4
瓦库纳姆 2年前 回复TA
啊这,原来可以有括号的吗= =