ceil((double)x/n); x <= 10^12 and n <10^6; can anyone provide a test case or something I got hacked many times but was unable to find a mistake
# | User | Rating |
---|---|---|
1 | tourist | 3985 |
2 | jiangly | 3814 |
3 | jqdai0815 | 3682 |
4 | Benq | 3529 |
5 | orzdevinwang | 3526 |
6 | ksun48 | 3517 |
7 | Radewoosh | 3410 |
8 | hos.lyric | 3399 |
9 | ecnerwala | 3392 |
9 | Um_nik | 3392 |
# | User | Contrib. |
---|---|---|
1 | cry | 169 |
2 | maomao90 | 162 |
2 | Um_nik | 162 |
4 | atcoder_official | 161 |
5 | djm03178 | 158 |
6 | -is-this-fft- | 157 |
7 | adamant | 155 |
8 | awoo | 154 |
8 | Dominater069 | 154 |
10 | luogu_official | 150 |
ceil((double)x/n); x <= 10^12 and n <10^6; can anyone provide a test case or something I got hacked many times but was unable to find a mistake
Name |
---|
I can give you a reason why it can be wrong: because of how doubles are stored (IEEE 754), they might not be accurate, and that can lead to inaccurate result
if you want ceil, then use
(x + n - 1) / n
is there any test case to show this i am unable to find one
it fails for bigger number like if you try to do 100000000000000001/100000000000000000 it will give you 1 directly but ceil of this should be 2
but test case allow 10^12 for x and 10^6 for n
You can try stress-testing. I believe
ceil()
will cause precision error by nature, regardless of the constraints.but if we give by this method ie (x+n-1)/n then wont it lead to overflows due to addition?
yes
then how does N8LnR2Nqf8Q4FN says to give (x+n-1)/n and not
ceil(double(x)/n)
I don't think any problem setter would be that evil.
Also, if you are afraid of overflow, you can try
x / n + (x % n != 0)
, although it requires more divisions, which is slower and uglier (but I guess it's easier to understand).And,
__int128
is also an option as well, you can have a look at it.