# JULY LUNCHTIME 2021

for the redalert problem, if i write my code as follows:

#include
using namespace std;

int main() {
int t;
cin>>t;

``````while(t--){
int n,d,h,x,flag=0;
cin>>n>>d>>h;
int sum=0,a[n];

for(int i=0; i<n; i++){
cin>>a[i];
}

for(int i=0; i<n; i++){

if(a[i]>0){
sum+=a[i];
}else if(a[i]==0 && sum>d){
sum=sum-d;
}else if(a[i]==0 && sum<=d){
sum=0;
}

if(sum>h){
flag=1;
cout<<"YES"<<endl;
break;}

}

if(flag==0){
cout<<"NO"<<endl;
}
}

return 0;
``````

}

SecondCode::

#include
using namespace std;

int main() {
int t;
cin>>t;

``````while(t--){

int n,d,h,x,flag=0;
cin>>n>>d>>h;
int sum=0,a[n];

for(int i=0; i<n; i++){

cin>>a[i];

if(a[i]>0){
sum+=a[i];
}else if(a[i]==0 && sum>d){
sum=sum-d;
}else if(a[i]==0 && sum<=d){
sum=0;
}

if(sum>h){
flag=1;
cout<<"YES"<<endl;
break;    }

}

if(flag==0){
cout<<"NO"<<endl;
}

}

return 0;
``````

}

briefly my first code is written by taking inputs in a seperate loop and for checking conditions I used another loop, it shows as correct answer after submission but if I use only a single loop then I am getting as wrong answer after submissionâ€¦ can anyone please just clarify me why is this happeningâ€¦ In what way and how they both differ !!

In the second code, you are breaking from the loop if the sum is > h. If you do this while reading input, the code wonâ€™t read the entire input.
For example, letâ€™s assume the input is given as the following:
2
5 2
1 2 3 4 5
1 2
1
(First test case, with N = 5, h = 2)
when you read 2, the sum becomes 3 and you break from the loop. So, the code starts reading input from 3 onwards (meaning that 3 becomes the N of the second test case, 4 becomes the h, and so on.

So just remove the two lines in the if statement and place them after the loop. It will work fine.

2 Likes

Got it, Thank you

1 Like