
获得最多的奖金
发布日期:2021-05-13 00:13:06
浏览次数:20
分类:原创文章
本文共 1509 字,大约阅读时间需要 5 分钟。
小明在越南旅游,参加了当地的娱乐活动。小明运气很好,拿到了大奖, 到了最后的拿奖金环节。小明发现桌子上放着一列红包,每个红包上写着奖金数额。现在主持人给要求小明在这一列红包之间“切”2刀,将这一列红包“切”成3组,并且第一组的奖金之和等于最后一组奖金和(允许任意一组的红包集合是空)。最终第一组红包的奖金之和就是小明能拿到的总奖金。小明想知道最多能拿到的奖金是多少,你能帮他算算吗。举例解释:桌子上放了红包 1, 2, 3, 4, 7, 10。小明在“4,7”之间、“7,10” 之间各切一刀,将红包分成3组 [1, 2, 3, 4] [7] [10],其中第一组奖金之和=第三组奖金之和=10,所以小明可以拿到10越南盾。输入描述:第一行包含一个正整数n,(1<=n<= 200 000),表示有多少个红包。第二行包含n个正整数d[i],表示每个红包包含的奖金数额。其中1<= d[i] <= 1000 000 000输出描述:小明可以拿到的总奖金输入例子1:51 3 1 1 4输出例子1:5例子说明1:[1,3,1] [ ] [1,4] ,其中第一组奖金和是5,等于第三组奖金和。所以小明可以拿到5越南盾输入例子2:51 3 2 1 4输出例子2:4例子说明2:[1,3] [2,1] [4],小明可以拿到4越南盾输入例子3:34 1 2输出例子3:0例子说明3:
import sysdef main(): n = int(sys.stdin.readline()) counts = sys.stdin.readline().strip().split(" ") counts = list(map(lambda x: int(x), counts)) if n == 1: print(0) return 0 left = 0 right = len(counts) l1 = counts[0] l2 = 0 results = [] while left<right: if l1 < l2: left += 1 if left>=right: break l1 += counts[left] elif l1>l2: right -= 1 if right <= left: break l2 += counts[right] else: results.append((l1,l2,left,right)) if right-left >= 2: left += 1 right -= 1 l1 += counts[left] l2 += counts[right] else: break if len(results) == 0: print(0) else: print(results[-1][0]) if __name__ == '__main__': main()
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年04月16日 09时10分53秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
关于继承的一些基本知识
2019-03-10
抖音发布黄金时间段,抖音上热门最佳时间
2019-03-10
我的图床~
2019-03-10
Thymeleaf sec:authorize 标签不生效
2019-03-11
Iterable与Iterator
2019-03-11
Python机器学习(六十五)Matplotlib 入门
2019-03-11
关于WebView当前地址问题的疑惑
2019-03-11
Python机器学习(九十二)Pandas 统计
2019-03-11
SecSolar:为代码“捉虫”,让你能更专心写代码
2019-03-11
1965 - 2019 年最流行的编程语言变化
2019-03-11
链上钱包的博彩雷区
2019-03-11
GRUB2
2019-03-11
微信JS-SDK DEMO页面和示例代码
2019-03-11
Chrome查找发请求的js之黑箱调试
2019-03-11
GridView的另外一种分页方式,可提高加载速度
2019-03-11
GridView自定义删除操作
2019-03-11
一张图搞定RPC框架核心原理
2019-03-11
Scala中的包
2019-03-11