BITCS2016程序设计 | 7. 蜜汁序列

7. 蜜汁序列

成绩 10 开启时间 2016年09月2日 星期五 09:00
折扣 0.8 折扣时间 2016年09月7日 星期三 23:40
允许迟交 关闭时间 2016年10月10日 星期一 23:40

题目描述

传说中有一种蜜汁序列特别甜,所以爱吃甜的强渣学长特别喜欢这种序列。。。

蜜汁序列的定义如下:对于一个长度为n的序列a1,...,an,如果这个序列的n个前缀和全部非负,即若a1>=0,a1+a2>=0,...,a1+a2+...+an>=0,则称a序列是蜜汁序列。。。

显然一些蜜汁序列可以分成更多的蜜汁序列,例如1 2这个蜜汁序列可以分成1和2两个蜜汁序列,现在有一个长度为n的蜜汁序列,要求你把他分成若干连续的段,使得每段都是一个蜜汁序列,问最多可以分成多少段?

输入

多组用例,每组用例首先输入一个整数n表示给出的蜜汁序列长度,之后输入n个整数a1,a2,...,an表示该序列的n个元素,以文件尾结束输入

输出

对于每组用例,输出一个整数占一行,表示该序列最多可以分成多少个蜜汁序列

数据范围

用例不超过10组,1<=n<=10^6,-10^4<=ai<=10^4(i=1,2,...,n)

样例输入

1

1

3

1 2 3

样例输出

1

3

  测试输入关于“测试输入”的帮助 期待的输出关于“期待的输出”的帮助 时间限制关于“时间限制”的帮助 内存限制关于“内存限制”的帮助 额外进程关于“{$a} 个额外进程”的帮助
测试用例 1 以文本方式显示
  1. 1↵
  2. 1↵
  3. 3↵
  4. 1 2 3↵
以文本方式显示
  1. 1↵
  2. 3↵
1秒 64M 0

解题思路:
这道题的本质就是:输入一串数列,我们要找到这串数列中子串和大于0的数列个数。因为输入的数据有可能为负数,所以这题目的贪心思路表现为:首先,单一的正数是肯定符合蜜汁序列定义的,那么如果全部都是正数,则如给出的示例一样,序列个数即为输入的整数个数。然而题目的陷阱在于负数,即可能出现2,1,-2的情况,这个时候蜜汁序列个数为1,因为要保证所有的子串和为正数。所以,我们可以倒过来看序列,当前扫描到负数时,向前进行遍历,如果此时几个元素和仍未负数,则继续向前扫描,直到和为正停止;如果当前扫描的元素为正,则自动序列计数+1。



虽然我们的运行效率不是最高,但是我们代码短呀哈哈哈~(自我安慰。。。)其实真的很建议每年老师们可以把排行榜前面十名的代码公开,可以让大家互相学习思路,如何提高代码效率精简编程思路~

结果:



在这里再说一句题外话,今年老师和助教们出题非常注意题目类型的分类,这样也有助于大家对某一类算法的题目自身态度由初识、沉稳、熟知、轻松慢慢转换。所以,大家请好好做题吧!




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值