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