题目描述
给定 N 个加号、M 个减号以及 N+M+1 个整数 A1,A2,⋅⋅⋅,AN+M+1,小明想知道在所有由这 N 个加号、M 个减号以及 N+M+1 个整数凑出的合法的 后缀表达式中,结果最大的是哪一个?
请你输出这个最大的结果。
例如使用 1 2 3 + -,则 "2 3 + 1 -" 这个后缀表达式结果是 4,是最大的。
输入描述
第一行包含两个整数 N,M。
第二行包含 N+M+1 个整数 A1,A2,⋅⋅⋅,AN+M+1。
其中,0≤N,M≤105,−109≤Ai≤109。
输出描述
输出一个整,代表答案。
输入输出样例
示例
输入
1 1
1 2 3
输出
4
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
总通过次数: 1429 | 总提交次数: 2466 | 通过率: 57.9%
难度: 中等 标签: 思维, 2019, 省赛
源码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Scanner;
public class 后缀表达式 {
public static void main(String[] args) throws IOException {
StreamTokenizer sc=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
sc.nextToken();
int n=(int) sc.nval;
sc.nextToken();
int m=(int) sc.nval;
int k=n+m+1;
int[] a=new int[k];
for (int i = 0; i < a.length; i++) {
sc.nextToken();
a[i]=(int) sc.nval;
}
Arrays.sort(a);
long sum=0;
if (m==0) {
for (int i = 0; i < a.length; i++) {
sum+=a[i];
}
}else {
sum+=a[k-1];
sum-=a[0];
for (int i = 1; i < a.length-1; i++) {
sum+=Math.abs(a[i]);
}
}
System.out.println(sum);
}
}
加上一个最大值,减去一个最小值,剩下的值全部相加,即为结果