Hi! This is my first ever post on Codeforces XD↵
I'm facing some weird issue here, I've solved [problem:484A] this problem and it works fine with the tastcases given in the submission details in my own compiler (I'm using vscode) but is apparently giving different outputs on Codeforces' judge.↵
And the difference is like, off by 1!↵
↵
I'm assuming there's some problem with the values being very large, since the bug happens with the 18 digit testcase lol. Could there be some memory trick that I can do? I'm relatively new to the c++ community and would be very happy to get ur tips.↵
↵
I've attached the screenshots from 1)cf output & 2)my original output↵
any ideas? I'd be thankful.↵
↵
also here's my code:↵
↵
~~~~~↵
#include <bits/stdc++.h>↵
↵
using namespace std;↵
long long l, r;↵
long long p, ans = 0; // ans = 32↵
↵
int main()↵
{↵
int n, lg1, lg2;↵
↵
↵
cin >> n;↵
for (int i = 0; i < n; i++)↵
{↵
cin >> l >> r; // 38 , 63↵
lg1 = log2(l); // 5↵
lg2 = log2(r); // 5↵
↵
if (lg1 != lg2)↵
{↵
if (r == pow(2, lg2 + 1) - 1)↵
{↵
ans = pow(2, lg2 + 1) - 1;↵
}↵
else↵
{↵
ans = pow(2, lg2) - 1;↵
}↵
}↵
else↵
{↵
if (r == l)↵
{↵
ans = l;↵
}↵
else↵
{↵
int i = lg1; // i = 5 ,↵
ans = 0;↵
while (lg1 == lg2)↵
{↵
p = pow(2, i); // 32↵
if (l >= p)↵
ans += p;↵
l %= p; // 6↵
r %= p; // 31↵
lg1 = log2(l); // 2↵
lg2 = log2(r); // 4↵
i--;↵
}↵
↵
if (r == pow(2, lg2 + 1) - 1)↵
{↵
ans += r;↵
}↵
else↵
{↵
ans += pow(2, lg2) - 1;↵
}↵
}↵
}↵
↵
cout << ans << endl;↵
}↵
}↵
~~~~~↵
↵
I'm assuming there's some problem with the values being very large, since the bug happens with the 18 digit testcase lol. Could there be some memory trick that I can do? I'm relatively new to the c++ community and would be very happy to get ur tips.↵
↵
↵
↵
And the difference is like, off by 1!↵
↵
↵
↵
↵
~~~~~↵
#include <bits/stdc++.h>↵
↵
using namespace std;↵
long long l, r;↵
long long p, ans = 0; // ans = 32↵
↵
int main()↵
{↵
int n, lg1, lg2;↵
↵
↵
cin >> n;↵
for (int i = 0; i < n; i++)↵
{↵
cin >> l >> r; // 38 , 63↵
lg1 = log2(l); // 5↵
lg2 = log2(r); // 5↵
↵
if (lg1 != lg2)↵
{↵
if (r == pow(2, lg2 + 1) - 1)↵
{↵
ans = pow(2, lg2 + 1) - 1;↵
}↵
else↵
{↵
ans = pow(2, lg2) - 1;↵
}↵
}↵
else↵
{↵
if (r == l)↵
{↵
ans = l;↵
}↵
else↵
{↵
int i = lg1; // i = 5 ,↵
ans = 0;↵
while (lg1 == lg2)↵
{↵
p = pow(2, i); // 32↵
if (l >= p)↵
ans += p;↵
l %= p; // 6↵
r %= p; // 31↵
lg1 = log2(l); // 2↵
lg2 = log2(r); // 4↵
i--;↵
}↵
↵
if (r == pow(2, lg2 + 1) - 1)↵
{↵
ans += r;↵
}↵
else↵
{↵
ans += pow(2, lg2) - 1;↵
}↵
}↵
}↵
↵
cout << ans << endl;↵
}↵
}↵
~~~~~↵
↵
I'm assuming there's some problem with the values being very large, since the bug happens with the 18 digit testcase lol. Could there be some memory trick that I can do? I'm relatively new to the c++ community and would be very happy to get ur tips.↵
↵
↵
↵