【Python训练营】Python每日一练----第26天:后缀表达式

举报
是Dream呀 发表于 2022/02/21 15:28:14 2022/02/21
【摘要】 【Python训练营】Python每日一练----第26天:后缀表达式

在这里插入图片描述

📢📢📢📣📣📣
🌻🌻🌻Hello,大家好我叫是Dream呀,一个有趣的Python博主,多多关照😜😜😜
🏅🏅🏅2021年度博客之星TOP100,2021年度博客之星领域TOP5,Python领域优质创作者,欢迎大家找我合作学习(文末有VX 想进学习交流群or学习资料 欢迎+++)
💕入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀
💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺
🍉🍉🍉“一万次悲伤,依然会有Dream,我一直在最温暖的地方等你”,唱的就是我!哈哈哈~🌈🌈🌈
🌟🌟🌟✨✨✨

@TOC

题目描述

题目描述
给定 N 个加号、M 个减号以及 N + M + 1个整数 ,小明想知道在所有由这 N 个加号、MM 个减号以及 N + M +1个整数凑出的合法的 后缀表达式中,结果最大的是哪一个?
请你输出这个最大的结果。
例如使用 1 2 3 + -,则 “2 3 + 1 -” 这个后缀表达式结果是 4,是最大的。

输入描述
第一行包含两个整数 N , M

第二行包含 N + M + 1个整数 A 。

输出描述
输出一个整,代表答案。

输入输出样例
示例
输入
1 1
1 2 3
输出
4

运行限制
最大运行时间:1s
最大运行内存: 256M

解题思路

  • 这道问题首先要明确一点,输入的数据中可以有负数,这就要求我们 +或者-的时候要考虑括号的问题,怎样才能使我们要求的数据之和最大呢。
  • 首先就是没有-号的时候,直接将输入的数据求和就可以啦;
  • 有-号出现的时候,我们举例进行观察:a1 < a2 < a3 < a4 < a5 < a6。
  • 一个"-“号:(a1 + a2 + a3) - (a4 + a5 + a6)
    两个”-“号:(a1 + a2 + a3) - (a4 + a5) - a6
    三个”-“号:(a1 + a2 + a3) - a4 - a5 - a6
    四个”-“号:(a1 + a2) - (a4 - a3) - a5 - a6
    五个”-"号:a1 - (a5 - a2) - (a4 - a3) - a6
    我们可以发现一件神奇的事情,上面几个5个式子全部都是相等的,都等价于a1 + a2 + a3 - a4 - a5 - a6。那么简言之,就是我们只需要讨论一个减号的时候就可以解决所有减号的问题啦!
  • 1.如果所有的数都是正数:那么 (a2 + a3 + a4 + a5 + a6) - (a1) 既是最大的结果
    2.如果所有的数都是负数:那么 (a6) - (a1 + a2 + a3 + a4 + a5) 既是最大的结果,等价于 (abs(a1) + abs(a2) + abs(a3) + abs(a4) + abs(a5)) - abs(a6),跟第1种有点类似。
    3.如果有正有负,那么 (a1 + a2 + a3) - (a4 + a5 + a6),其中a1、a2、a3是正数,a4、a5、a6是负数,既是最大的结果,等价于 (a1 + a2 + a3) + abs(a4) + abs(a5) + abs(a6)
  • 所以说我们进行总结: 1.如果所有的数都是正数:最后的 a6 - a1 等价于 abs(a1 - a6) 2.如果所有的数都是负数,也是 abs(a1) - abs(a6),等价于 abs(a1 - a6) 3.如果有正有负:是 a1 + abs(a6),等价于 a1 - a6,肯定是正数,所以也可以加上绝对值号:abs(a1 - a6)

源码分享

# Time    : 2022/2/21 14:41
# File    : 后缀表达式.py
# Author  : 是Dream呀!
# VX      : Xu18300396393
# 一万次悲伤,依然会有Dream,我一直在最温暖的地方等你!
N,M = map(int,input().split())
list1 = list(map(int,input().split()))
if M == 0:
    print(sum(list1))
else:
    sum = 0
    list1.sort()
    for i in range(1,N+M):
        sum += abs(list1[i])
    sum += abs(list1[-1]-list1[0])
    print(sum)

学习总结

  • 单行对多个多个变量进行赋值:N,M = map(int,input().split())
  • 总结规律会使一道很复杂的题目变得很简单!

🏅今天是我在Python训练营的第 26 天,希望每天都能见到最棒的你🏅

🌲🌲🌲 好啦,这就是今天要分享给大家的全部内容了
❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了~
在这里插入图片描述
在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200