hdu 5783 Divide the Sequence【水题】
2016-08-02 18:52
393 查看
Divide the Sequence
Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 126 Accepted Submission(s): 79
[align=left]Problem Description[/align]
Alice has a sequence A, She wants to split A into as much as possible continuous subsequences, satisfying that for each subsequence, every its prefix sum is not small than 0.
[align=left]Input[/align]
The input consists of multiple test cases.
Each test case begin with an integer n in a single line.
The next line contains n
integers A1,A2⋯An.
1≤n≤1e6
−10000≤A[i]≤10000
You can assume that there is at least one solution.
[align=left]Output[/align]
For each test case, output an integer indicates the maximum number of sequence division.
[align=left]Sample Input[/align]
[align=left]6[/align]
[align=left]1 2 3 4 5 6[/align]
[align=left]4 [/align]
[align=left]1 2 -3 0[/align]
[align=left]5[/align]
[align=left]0 0 0 0 0[/align]
[align=left]Sample Output[/align]
[align=left]6[/align]
[align=left]2[/align]
[align=left]5[/align]
[align=left]Author[/align]
ZSTU
[align=left]Source[/align]
2016 Multi-University Training Contest 5
题目大意:将一个序列拆分成尽可能多的子序列,使得子序列的前缀和全部大于等于0、
思路:
1、正向考虑,找到一个负数之后,从后向前找,直到加和为0为止,这个区间就是一个子序列。如果没有负数,其他的各自成一个序列。可惜会TLE 。因为时间复杂度不定,最不好的情况甚至会达到N^2。
2、那么我们不妨逆向思维来想这个问题,倒着走,如果遇到了一个负数之后,继续向前走,直到加和为0为止,这个区间就是一个子序列,如果没有负数,其他的各自成一个序列。
Ac代码:
#include<stdio.h>
#include<string.h>
using namespace std;
#define ll __int64
ll a[1000500];
ll aa[10005000];
ll sum[1000500];
int main()
{
ll n;
while(~scanf("%I64d",&n))
{
memset(sum,0,sizeof(sum));
memset(a,0,sizeof(a));
for(int i=0;i<n;i++)
{
scanf("%I64d",&a[i]);
}
int output=n;
int tmp=0;
ll summ;
for(int i=n-1;i>=0;i--)
{
if(tmp==0&&a[i]>=0)continue;
if(tmp==0&&a[i]<0)
{
tmp=1;
summ=a[i];
continue;
}
if(tmp==1)
{
summ+=a[i];
output--;
if(summ>=0)
{
tmp=0;
}
}
}
printf("%d\n",output);
}
}
相关文章推荐
- HDU 5783 Divide the Sequence(水题)
- hdu 5783 Divide the Sequence(2016 Multi-University Training Contest 5——水题)
- HDU-5783 Divide the Sequence(贪心水题)
- (HDU 5783)Divide the Sequence <思维水题> 多校训练5
- HDU 5783 - Divide the Sequence
- HDU 5783 Divide the Sequence
- HDU 5783 Divide the Sequence
- HDU 5783 Divide the Sequence
- hdu 5783 Divide the Sequence
- HDU-5783 Divide the Sequence(贪心)
- HDU 5783 Divide the Sequence 2016 Multi-University Training Contest 5
- hdu 5783 Divide the Sequence
- HDU 5783 Divide the Sequence——贪心
- HDU 5783 Divide the Sequence(贪心)
- 2016多校5 hdu 5783 Divide the Sequence 贪心
- hdu 5783——Divide the Sequence
- HDU 5783 Divide the Sequence
- hdu 5783 Divide the Sequence 贪心
- hdu-5783 Divide the Sequence(贪心)
- 【HDU】5783 Divide the Sequence