题目:
思路:
首先要知道“后缀表达式”和普通算式的区别
所以,可以把问题分成:
1.有负号的情况:
…1.例如数字全是正数,那么必须消耗一个最小的数字;
…2.例如数字全是负数,那么需要消耗一个最大的数字;
…可以总结为 排序之后,最大数-最小数 然后和其他数的绝对值全部相加。
2.无负号的情况:只有加号,全部相加即可
代码:
import java.util.Arrays;
import java.util.Scanner;
public class I_后缀表达式 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();//符号
int[] arr = new int[n + m + 1];
for (int i = 0; i < n + m + 1; i++) {
arr[i] = sc.nextInt();
}
long res = 0;//结果
if (m == 0) {//情况1:没有负号
for (int j : arr) {
res += j;
}
} else {//情况2:有负号
Arrays.sort(arr);
int ans = arr[arr.length - 1] - arr[0];
for (int j = 1; j < n + m; j++) {
if (arr[j] >= 0) {
res += arr[j];
} else {
res -= arr[j];
}
}
res+=ans;
}
System.out.println(res);
}
}