WA In Chef and Walk

Can anyone find what’s wrong in this code I tried for every possible test case but after submission it gives WA for large numbers

 #define ll long long
 using namespace std;
 int main()
 {
 	ll t;
 	cin>>t;
 	while(t--)
 	{
 	   ll n,k;
 	   ll mod=1000000007;
 	   cin>>n>>k;
 	   ll a=(ll)floor((float)k/2);
 	   ll b=(ll)ceil((float)k/2);
 	   ll ans=(((n*n)%mod+(2*a*n)%mod)%mod+((b-1)*b)%mod)%mod;
 	   if(n==0)
 	   ans=(k*(k-1))%mod;
 	   cout<<ans<<endl;
 	}
 }

Firstly, Format your code.

1 Like

Done …now can u help?

Type casting a 64 bit integer into a float can cause problems. Use
a=k/2;b=(k+1)/2;
Generally, never use floating point arithmetic when integer answers are expected.
Integer division of a/b in C++ is equivalent to floor(a/b)

Thanks … :smiley: now it’s correct

https://www.codechef.com/viewsolution/32363169

can you please help me with this code

it got wa.

I don’t know about the rest, but you Cannot divide by 2 directly when you are doing modular arithmetic. This line ans1/=2.

thank you .

should i use modular multiplicative inverse?

Probably. If you still get wrong answer I’ll check the rest of the code.

still getting wrong answer!

n is an int up to 10^9 so ans=(n*n)%p; will overflow. Remember when you multiply 2 ints the answer is still an int, even if you assign it to a long long or take mod p afterwards. I would recommend rewriting the code and please use something like const int p= 1000000007 and take mod p. Your code is very ugly, and it’s hard to debug ugly codes.

thank you very much .

changed int to long long and it got accepted.