int main() { int test; scanf("%d",&test); for(int tt=1;tt<=test;tt++) { scanf("%d",&n); bs[0] = 0; mbc[0] = MAX; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); bs[i] = bs[i-1] + a[i]; mbc[i] = Min(mbc[i-1],bs[i]); } as[n+1] = 0; mac[n+1] = MAX; for(int i=n;i>0;i--) { as[i] = as[i+1] + a[i]; // mac[i] = Min(mac[i+1],as[i]); } makeQueue(); /*for(int i=1;i<=n;i++) { printf("%d ",mbc[i]); } printf("\n");*/ int cnt = 0; if(mbc[n] > 0) cnt ++; for(int i=2;i<=n;i++) { if(mac[i] <= 0) continue; /* if(mbc[i-1] <= 0) continue;*/ if(as[i] + mbc[i-1] <= 0) continue; cnt ++; } printf("Case %d: %d\n",tt,cnt); } return 0; }
// Build a linked list of nodes that forms the shortest path void breadthFirstSearch(struct node* startnode){ struct queue* queue = makeQueue(); Enqueue(queue, startnode); startnode->discovered = 1; while (QueueIsEmpty(queue) != 1){ struct node* tempnode = Dequeue(queue); int i; if (tempnode->name == 16) break; for (i = 0; i < 4; i++){ if (tempnode->adjacent[i] != 0 && tempnode->adjacent[i]->discovered != 1){ Enqueue(queue, tempnode->adjacent[i]); tempnode->adjacent[i]->parent = tempnode; // Linked list is reversed ! tempnode->adjacent[i]->discovered = 1; } } } }