后缀表达式

给定 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 。

【输出格式】
输出一个整数,代表答案。

【样例输入】

1 1
1 2 3

【样例输出】

4

【评测用例规模与约定】
对于所有评测用例,0 ≤ N, M ≤ 100000,−10^9≤ Ai ≤ 10 ^9。

解析

这道题目的坑是在于后缀表达式是可以加上括号计算的,而非直接贪心用最大的一些数减去最小的一些数。
括号和负号组合即可变号处理。

这道题的数据可以分为四种情况:

  1. 无减号(m=0):直接求所有数总和。
  2. 有减号(m!= 0):
    A.无负数:总和-最小正数
    B.负数个数等于总的元素个数:若负数个数等于n+m+1的话,肯定会留出一个负数来,无法通过加括号的形式变为正的,那么就只能加上这个负数。
    贪心的思想可知,若要使最后的和最大,那么这个负数也要最大(绝对值最小)。
    C.负数个数不等于总的元素个数:可以通过加括号的形式,将所有的减号变为加号的。故和即为所有元素的绝对值之和。

解释:-2*a[i]

看一下代码中的sum -= 2ll*a[i];
为什么是减两倍呢?

这是因为sum += a[i];我们在边输入的同时已经用sum累加了所有元素的和。
在没有减号的情况下,就可以直接输出结果sum了。

但是在有减号的情况下,就要思考一下了,例如现有数组:
a[i] = {-2,-1,2,3,5};
我们的sum此时的结果是所有数的和,sum=(-2)+(-1)+2+3+5;负数在sum中扮演的是减去的角色。

而在我们上面列举的几种情况中:
C情况,我们需要求的是所有元素的绝对值之和,也就是说应该变为sum=1+2+2+3+5。
这样就应该理解了,我们应该减去两倍的a[i](a[i]此时是负数,减去负数即加上正数,负负得正
i循环的次数=负数的个数,在输入数据的时候就可以用一个变量来计录负数的个数。

需要注意的是B情况,因为负数个数和所有元素个数相同,故会有一个负数不变号不能加回,故循环的次数=负数个数-1。
而这个负数应为最大的负数(绝对值最小),也就是i=fu-1的元素值,如a[i] = {-2,-1,2,3,5};这个负数就是-1.

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5+100;
ll a[maxn];int main() {int N, M;cin >> N >>M; //N个加号,M个减号int num = N+M+1;int fu = 0;  //统计负数的个数ll sum = 0;for (int i = 0; i < num; i++) {cin >> a[i];sum += a[i];if(a[i] < 0) fu++;}sort(a, a+num);if (M) { //如果有减法,需要对比总数目与负数数目if (fu) { //如果有负数if (fu == num) { //负数的数目与总目相等(必有一个负数无法通过加括号的形式变为正,故不能加回)for(int i = 0; i < fu - 1; i++){sum -= 2ll*a[i]; //输入时sum减过一次这些负数,现在是加回负元素,故应减去两倍(负负得正)。}} else { //负数的数目与总数目不相等(所有负数都可以变正,故将所有负数加回)for (int i = 0; i < fu; i++) {sum -= 2ll*a[i];}}} else { //如果没有负数,就只有一个负号起作用,减去正数minsum -= 2ll * a[0];}}//如果没有减法,则最大值就直接是所有数的和cout << sum << endl;
}

[蓝桥杯][2019年第十届真题c/c++B组]后缀表达式(解释sum -= 2*a[i])相关推荐

  1. [蓝桥杯][2019年第十届真题c/c++B组]迷宫(寻找路径bfs及文件输入输出)

    试题 E: 迷宫 1.问题描述 2.思路详解 3.AC代码 1.问题描述 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可以通行的地方. 010000 000100 00100 ...

  2. [蓝桥杯][2019年第十届真题c/c++B组]完全二叉树的权值

    题目描述 给定一棵包含 N 个节点的完全二叉树,树上每个节点都有一个权值,按从 上到下.从左到右的顺序依次是 A1, A2, · · · AN,如下图所示: 现在小明要把相同深度的节点的权值加在一起, ...

  3. [蓝桥杯][2019年第十届真题]扫地机器人(二分+贪心)

    题目描述 小明公司的办公区有一条长长的走廊,由 N 个方格区域组成,如下图所 示. 走廊内部署了 K 台扫地机器人,其中第 i 台在第 Ai 个方格区域中. 已知扫地机器人每分钟可以移动到左右相邻的方 ...

  4. [蓝桥杯][2019年第十届真题]糖果(状压dp)

    题目描述 糖果店的老板一共有 M 种口味的糖果出售.为了方便描述,我们将 M 种 口味编号 1 ∼ M. 小明希望能品尝到所有口味的糖果.遗憾的是老板并不单独出售糖果,而 是 K 颗一包整包出售. 幸 ...

  5. [蓝桥杯][2019年第十届真题]修改数组(并查集)

    题目描述 给定一个长度为 N 的数组 A = [A1, A2, · · · AN ],数组中有可能有重复出现 的整数. 现在小明要按以下方法将其修改为没有重复整数的数组.小明会依次修改 A2,A3,· ...

  6. [蓝桥杯][2019年第十届真题]等差数列

    题目描述 数学老师给小明出了一道等差数列求和的题目.但是粗心的小明忘记了一 部分的数列,只记得其中 N 个整数. 现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有 几项? 输入 ...

  7. [蓝桥杯][2019年第十届真题]外卖店优先级(模拟)

    题目描述 "饱了么"外卖系统中维护着 N 家外卖店,编号 1 ∼ N.每家外卖店都有 一个优先级,初始时 (0 时刻) 优先级都为 0. 每经过 1 个时间单位,如果外卖店没有订单 ...

  8. [蓝桥杯][2019年第十届真题]后缀表达式(正解!!)

    题目描述 给定 N 个加号.M 个减号以及 N + M + 1 个整数 A1, A2, · · · , AN+M+1,小 明想知道在所有由这 N 个加号.M 个减号以及 N + M + 1 个整数凑出 ...

  9. [蓝桥杯][2019年第十届真题]-----外卖店优先级

    题目描述: "饱了么"外卖系统中维护着 N 家外卖店,编号 1 ∼ N.每家外卖店都有 一个优先级,初始时 (0 时刻) 优先级都为 0. 每经过 1 个时间单位,如果外卖店没有订 ...

最新文章

  1. 爬虫练成之 analyst 和 engineer 技术与业务
  2. 内联函数的定义可能不止一次
  3. 编译away3d例程序记
  4. (z)如何在SignalTAP II中保留特定节点
  5. 提高「搜商」,挣大钱
  6. 加权回归估计_比率估计与回归估计
  7. linux装入归档文件时出现了一个错误_Linux下解压tar.xz文件
  8. 软件测试系统并发数,“并发用户数”、“系统用户数”和“同时在线用户数”之间的差别...
  9. L1-041 寻找250 (10 分)—团体程序设计天梯赛
  10. 图像分类网络总结回顾(上)
  11. 已经解决ProcfsMetricsGetter: Exception when trying to compute pagesize
  12. 深度学习和神经网络介绍
  13. 使用Python实现消息轰炸
  14. 压缩文件已损坏怎么办?恢复压缩文件,解决方法看这里
  15. linux系统四个组成部分,Linux系统由哪几部分组成?系统详解(干货)
  16. subclipse使用详解
  17. 使用反射+注解封装一个基于Sqlite极简的android数据库框架
  18. linux emacs 编译,CentOS编译安装emacs并配置
  19. ubuntu护眼第二大神器 Redshift
  20. C/C++编程学习 - 第20周 ⑧ 复读机

热门文章

  1. 3.建造者模式(Builder)
  2. UML建模之状态图(Statechart Diagram)
  3. pdfContentByte 类 图像和文本的绝对位置
  4. 10 分钟入门 Less 和 Sass
  5. Vue.Draggable拖拽功能的配置和使用方法
  6. 科研汪的日常--“键皇”,静电容的又一座高峰(REALFORCE RFU联名版开箱)
  7. 7-30 查询水果价格 (15 分)
  8. 7-69 计算圆周率 (15 分)
  9. 3001基于哈夫曼树的数据压缩算法(附思路及注释)
  10. 生成式对抗网络GAN