In this problem A : Free Ice Cream, upon taking the string inputs, why is the null string read in the first iteration? Below shows my accepted soln. (the soln I rather proposed in my mind was to run the loop from i=0 to i<n which throws errors.
#include<bits/stdc++.h>
using namespace std;
int main(){
long long int n,x;
cin>>n>>x;
long long int cnt=0, ans=x;
for(int i=0;i<=n;i++){
string s;
getline(cin,s);
if(i==0) continue;
auto temp = s.substr(2);
long long int num = stoi(temp);
if(s[0]=='+'){
ans+=num;
}
else{
if(ans>=num){
ans-=num;
}
else{
cnt++;
}
}
}
cout<<ans<<" "<<cnt<<endl;
}
Auto comment: topic has been updated by nosferrati_1941 (previous revision, new revision, compare).
When the integer variables
n
andx
are read, the file cursor is set to the newline after the integerx
; the newline itself hasn't been read yet. Since the functiongetline
reads a string until the next newline, regardless if any valid characters have been read, the first call togetline
returns an empty string since it reads that newline and immediately stops.In this problem, it is more advisable to read the character '+' or '-' and the integer $$$d$$$ separately using the following code segment:
Direct reads to types like
char
orint
will never stop until actual content has been read, skipping all prior whitespace, and is a better choice in most cases for competitive programming.Thank you!