Why does this code is RTE ?!
http://mirror.codeforces.com/contest/581/submission/30130126
# | User | Rating |
---|---|---|
1 | tourist | 4009 |
2 | jiangly | 3823 |
3 | Benq | 3738 |
4 | Radewoosh | 3633 |
5 | jqdai0815 | 3620 |
6 | orzdevinwang | 3529 |
7 | ecnerwala | 3446 |
8 | Um_nik | 3396 |
9 | ksun48 | 3390 |
10 | gamegame | 3386 |
# | User | Contrib. |
---|---|---|
1 | cry | 167 |
2 | maomao90 | 163 |
2 | Um_nik | 163 |
4 | atcoder_official | 161 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 157 |
8 | TheScrasse | 154 |
9 | nor | 153 |
9 | Dominater069 | 153 |
Name |
---|
Your comparison function is incorrect. For example it returns
true
for 0 and 0 which should never happen for correctless than
comparison.That's true but what's the problem ? If two equal values are swapped in the array it will cauz no effect.
Well first of all, even this is already enough according to C++ standard to lead to undefined behaviour so you can't expect anything after doing sort like that. But in reality I think your comparison function acts very weird in other cases too, like:
I don't think it can be well defined what sort should do in this case.
C++ assumes that your comparator is strict "less than" operator, not the "less than or equal to". So the followings must be satisfied, otherwise you'll get weird result.
1) if func(a, b) is true, then func(b, a) must be false 2) if func(a, b) and func(b, c) is true, then func(a, c) must be true 3) func(a, a) must be false