harshilgoel's blog

By harshilgoel, 10 years ago, In English

http://codeforces.me/contest/460/submission/7541409

When i run the code on my machine, it gives the correct output whereas here it shows different

  • Vote: I like it
  • -19
  • Vote: I do not like it

»
10 years ago, # |
Rev. 2   Vote: I like it 0 Vote: I do not like it

First, pow(x, y) on GNU C++ 4.7 compiler calculates something like with help of Taylor series. It is not 100% accurate, for example, pow(5, 2) may return something like 25.0000000000001 or 24.9999999999999. So you can write your own function that calculates xy for integer x and y, or you can use round function. Also some C++ compilers provide overload pow(double, long long), which will work as intended, because it is binary exponentiation and double type stores integers less than 253 without errors.

Second, you declare d as int, but 104·815 + 104 > 109, so overflow will happen.

And third, you don't check, whether d < 109.

AC: 7545312