题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5783
本来一道可以出的很难的题,但是题目给了一个条件让这题变得很水。
题目保证了有解,也就是说我们不用考虑会有无解的情况,那么我们只需要直接从后面开始讨论每一位的后缀和,只要大于0就可以算成一个序列。
#include <cstdio>
const int maxn = 1000000+5;
typedef long long LL;
int a[maxn];
int main()
{
int n;
while(scanf("%d", &n) !=EOF)
{
for(int i=0; i<n; i++) scanf("%d", &a[i]);
LL sum = 0, ans = 0;
for(int i=n-1; i>=0; i--)
{
sum += a[i];
if(sum >= 0) ans++, sum = 0;
}
printf("%I64d\n", ans);
}
}
本文解决HDU 5783题目,介绍一种利用后缀和快速找出非负数序列的方法。通过从数组末尾向前遍历并累加元素值,一旦累计和达到非负则计数一次,最终输出非负序列的数量。
642

被折叠的 条评论
为什么被折叠?



