大角牛向前冲


私信TA

用户名:3244735816

访问量:665

签 名:

等  级
排  名 18450
经  验 744
参赛次数 0
文章发表 4
年  龄 0
在职情况 学生
学  校 湖北工业大学
专  业

  自我简介:

TA的其他文章

解题思路:

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


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


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 人评分

  评论区

错误,输入
1 2
1 2 3 4
就不对,按照你的4-1+2+3=8,但是实际是4+3-2-1=4
2022-10-31 15:00:27
啊这,原来可以有括号的吗= =
2022-04-07 16:15:58
  • «
  • 1
  • »