这个当时我没有做出来,看了很多人包括学长的代码才懂,我感觉最好的方法还是下面那一种,标记以谁开头的是不行的,我感觉有点不好理解,如果不懂举组样例在纸上写一下就会比较清楚了
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define LL long long
LL a[];
bool flag[];
int main()
{
int t,n,i,total,id=;
LL sum;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
memset(flag,,sizeof(flag));
total=n;
for(i=;i<n;i++)
scanf("%I64d",&a[i]);
sum=a[n-];
if(sum<=)
{
total--;
flag[n-]=;
}
for(i=n-;i>=;i--)
{
if(sum<=)
{
sum+=a[i];
if(sum<=)
{
total--;
flag[i]=;
}
}
else
{
if(a[i]<=)
{
sum=a[i];
total--;
flag[i]=;
}
}
}
if(sum<=)
{
for(i=n-;i>=;i--)
{
sum+=a[i];
if(sum<= && flag[i]==)
total--;
if(sum>)
break;
}
}
printf("Case %d: %d\n",id++,total);
}
return ;
}