题目 2306: 蓝桥杯2019年第十届省赛真题-后缀表达式

news/2025/1/15 20:38:04/

题目

给定 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 ≤100000,−109 ≤ Ai ≤109。)

输出
输出一个数,表示答案

样例输入

1 1
1 2 3

样例输出

4

解题思路

首先是对后缀表达式运算过程的解读,样例给的“2 3 + 1 -”代表的是“2+3=5, 5-1=4”,因此,输出的就是4。

另外,一定要注意,题目样例没有反映出来的是,可以任意加上括号!!! 有括号的前提下,减号将成为决定负数是否能够反转变为正数的关键,因此,根据减号有无考虑分类,如下:

  1. 无减号时:所有数相加的和即为最大结果;

  2. 有减号时:
    (1) 全是负数时,最大值 = 最大的负数+其余所有负数的绝对值,如:

    输入:
    1 1
    -1 -2 -3最大值:
    -1-((-2)+(-3))
    --------------------------------------------------------------------
    输入:
    1 2
    -1 -2 -3 -4最大值:
    -1-((-2)+(-3))-(-4)
    --------------------------------------------------------------------
    输入:
    2 3
    -1 -2 -3 -4 -5 -6最大值:
    -1-((-2)+(-3))-((-4)+(-5))-(-6)
    

    (2) 全是正数时,最大值 = 其余所有数的和-最小的正数,如:

    输入:
    1 1
    2 3 4最大值:
    3+4-2
    --------------------------------------------------------------------
    输入:
    1 2
    2 3 4 5最大值:
    3+4-(2-5) = 10 = 3+4+5-2
    

    (3) 既有正数,也有负数时,最大值 = 所有数的绝对值之和,如:

    输入:
    1 1
    2 -3 4最大值
    2+4-(-3)
    --------------------------------------------------------------------
    输入:
    2 1
    2 -3 4 -6最大值
    2+4-((-3)+(-6))
    

找到规律,此题便迎刃而解了。

(参考博客:http://t.csdn.cn/stiBa,感谢分享思路!)

代码

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int cmp(const void *a, const void *b){return *(int *)a - *(int *)b;//升序
}int main()
{int i,N,M,temp;scanf("%d %d",&N,&M);int num = N+M+1;//数字总个数int positive[num],negative[num];int lenp=0,lenn=0;long int sum = 0;for (i=0;i<num;i++){scanf("%d",&temp);if (temp<0)negative[lenn++] = temp;elsepositive[lenp++] = temp;}if (M==0)//全是加号,所有数字相加{for (i=0;i<lenp;i++)sum+=positive[i];for (i=0;i<lenn;i++)sum+=negative[i];}else //有负号{qsort(negative,lenn,sizeof(int),cmp);qsort(positive,lenp,sizeof(int),cmp);if (lenp==0)//全是负数时,最大值 = 最大的负数+其余所有负数的绝对值{sum = negative[--lenn];for (i=0;i<lenn;i++)sum+=abs(negative[i]);}else if (lenn==0)//全是正数时,最大值 = 其余所有数的和-最小的正数{sum-=positive[0];for (i=1;i<lenp;i++)sum+=positive[i];}else//有正数,也有负数,最大值 = 所有数的绝对值之和{for (i=0;i<lenp;i++)sum+=positive[i];for (i=0;i<lenn;i++)sum+=abs(negative[i]);}}printf("%ld",sum);return 0;
}

http://www.ppmy.cn/news/354076.html

相关文章

什么蓝牙耳机牌子好还便宜?适合情人节送礼的蓝牙耳机品牌

现在市面上的蓝牙耳机无论是品牌还是款式&#xff0c;实在是多到数不清&#xff0c;因为技术太成熟&#xff0c;导致产品同质化非常严重&#xff0c;我们在挑选时&#xff0c;也无从下手。很多蓝牙耳机存在音质不好、连接不稳定等等问题&#xff0c;一不小心就踩雷了。为了让大…

送女友什么蓝牙耳机合适?适合送礼的无线蓝牙耳机

蓝牙耳机的出现直至现在&#xff0c;使用的频率越来越高&#xff0c;种类也越来越多&#xff0c;日常使用的&#xff0c;跑步使用的&#xff0c;真的是各种各样&#xff0c;每个品牌的蓝牙耳机主打的特点都是不一样的。那到底怎样挑选一款适合自己的耳机呢&#xff1f;这也难倒…

没有了耳机接口,怎么让手机同时支持充电和听歌?USB-C音频 边听边充 方案了解一下

现在大多安卓手机都取消3.5音频接口&#xff0c;耳机都变成type-c接口&#xff0c;造成了手机没办法边听歌边充电&#xff0c;网上有这种转换器卖&#xff0c;可以解决此问题&#xff0c;那么这些转换器的原理又是什么呢&#xff1f;乐得瑞LDR6023C教你如何实现USB Type-C手机快…

投影仪家用推荐最新?投影仪什么牌子性价比比较高

投影仪最新家用的选择应该是变焦投影仪。 之前聊过一些投影仪的选购事项&#xff0c;基本都是在谈论定焦投影仪&#xff0c;无可否认的是&#xff0c;投影仪这个行业一直在进步&#xff0c;如果想要选购最新的家用投影仪&#xff0c;真的应该了解一下变焦投影仪。 变焦投影仪又…

什么牌子投影仪效果最好?智能投影仪什么牌子好

投影仪市场内产品花样繁多&#xff0c;质量参差不齐。而投影仪自身的参数又五花八门&#xff0c;难免让人看花了眼。 本文希望通过对目前市场内的几款明星产品的讲解来帮助大家直接选到效果最好&#xff0c;品质最高的投影仪。 综合考虑了市场、品牌和消费者等相关因素&#xf…

AC风扇和EC风扇有什么区别?

C风扇和EC风扇之间的区别在于&#xff1a;AC风扇具有交流电&#xff0c;并且在不使其嗡嗡声或嗡嗡声的情况下控制起来非常昂贵。 EC风扇基本上是数字风扇。 它更容易控制。

空调制冷原理

制冷原理 压缩机将气态的氟利昂压缩为高温高压的液态氟利昂&#xff0c;然后送到冷凝器&#xff08;室外机&#xff09;散热后成为常温高压的液态氟利昂&#xff0c;所以室外机吹出来的是热风。 液态的氟利昂经 毛细管&#xff0c;进入蒸发器&#xff08;室内机&#xff09;&a…

空调调节 java,空调怎么调节自动模式

炎热的夏天里&#xff0c;在办公室或者回到家里&#xff0c;我们首先就是将空调打开&#xff0c;凉风袭来&#xff0c;可以缓缓炎热的感觉&#xff0c;但是有时候会觉得&#xff0c;空调开一会就不制冷了&#xff0c;这是为什么呢&#xff1f;空调不制冷其实有很多原因&#xf…