@suryaprak_adm @admin
My solution for the maximum light up in starters13(problem link : CodeChef: Practical coding for everyone) was
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int p,a,b,c,x,y;
cin>>p>>a>>b>>c>>x>>y;
int anar = p/(b+(a*x));
int chakri = p/(c+(a*y));
if(anar>chakri) cout<<anar<<"\n";
else cout<<chakri<<"\n";
}
}
This gave WA in 2nd and 3rd Task however when I submitted the exact same code apart from one change that is instead of
int p,a,b,c,x,y;
I changed it to
ll p,a,b,c,x,y;
(basically, I declared my variables in long long int instead of int)
Now the catch here is the problem clearly mentioned that these variables are
1<= P,a,b,c,x,y <= 10^9
(integers less than or equal10^9 can be stored in int right?)
I do not understand why the former code did not work when we know that all these variables do not need long long int.
What am I doing wrong here kindly explain?
but you are using multiplication here a*x which will give int overflow so use long for it.
1 Like
sorry thats where I’m confused, variable anar and chakri are equal to the multiplication a * x and a * y respectively, shouldn’t they be affected? but in this case I have to change the declaration of p,a,b,c,x and y in order for the solution to pass. if I keep the anar and chakri variables as int, the solution is accepted.
this solution is not accepted CodeChef: Practical coding for everyone
it gives WA
but this one does get accepted where I change int p,a,b,c,x,y;
to ll p,a,b,c,x,y;
When you multiply int a and int x, (a * x) is calculated as an int. For large inputs, (a * x) overflows the value of int. Then the overflowed int is added to b which then divides p to give your anar and chakri values. Consider the following example:
int a,b;
a=1000000000;
b=1000000000;
long long int c = a*b;
cout << c << endl;
long long int d,e;
d=1000000000;
e=1000000000;
long long int f = d*e;
cout << f << endl;
Here, the first cout prints a negative value because the multiplication is done on int a and int b which gives an overflowed value which is then cast to long long int but by that time the multiplication has already overflowed, so the value of c is negative. But in the second case we are multiplying two long long ints, so the result doesn’t overflow.
2 Likes
Oh right, now I understand.
Thank you so much, I will take care of this next time :’)