Блог пользователя ..vince

Автор ..vince, история, 6 лет назад, По-английски

so i was solving https://codeforces.me/contest/1138/problem/E. the idea here is quite obvious. compress all SCC as a single node and solve it like a normal DAG

then something strange happening. at the beginning i got a RTE verdict for my solution. when i was trying to find bugs in my code, i tried to reverse engineer and add this code my first DFS function (i used kosaraju's algorithm) :

if(n == 99998 && m == 99999 && d == 50) { if(u.fi > 100000 || u.se > 50) { cout << "KOSA : " << u.fi << " " << u.se << "\n"; fflush(stdout); } }

magically, adding this piece of code to my solution give me an AC verdict.

RTE solution : https://codeforces.me/contest/1138/submission/51269031

AC solution : https://codeforces.me/contest/1138/submission/51268839

so what really happened? is there any error in CF?

  • Проголосовать: нравится
  • +38
  • Проголосовать: не нравится

»
6 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Auto comment: topic has been updated by ..vince (previous revision, new revision, compare).

»
6 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Auto comment: topic has been updated by ..vince (previous revision, new revision, compare).

»
6 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

how u came to know you have to add this line

»
6 лет назад, # |
  Проголосовать: нравится +32 Проголосовать: не нравится

The problem is cursed, simple as that.

»
6 лет назад, # |
  Проголосовать: нравится +4 Проголосовать: не нравится

No, it's a bug in your code which invokes undefined behaviour which makes your program spuriously fail or pass depending on unrelated stuff like presence of debug output or precise form of control flow. C++ does not guarantee runtime errors for signed overflow, array out-of-bounds or similar stuff (see "undefined behaviour").