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

Автор kartikea_gupta, история, 4 года назад, По-английски

I submitted this solution to Problem A of Round #663. I know the problem was really easy and even my logic was correct. What actually caused problems was including the following two line in my void solve() function.

    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

I added the two lines for fast input/output through cin/cout but mistakenly added them to void solve(). However, after removing these two lines the code worked fine and got accepted.
Link to first solution.
Link to second solution.

Can someone please explain what exactly went wrong and why?
Thanks in advance!!
UPD: Not here for contributions. Plz just answer it if you know the answer.

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

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

I moved the 2 lines in the beginning of main(), and it got accepted. Putting those 2 lines inside main() like this guarantees that they run only once. You put those inside your solve() function, which will be run multiple times.

IIRC, it resets something but I can't remember (is it rdbuf?). Idk, I'm just gonna wait here until someone comes with a more detailed answer.

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

Everything went wrong when you copied that template

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

Your code calls ios_base::sync_with_stdio(false) after I/O (input/output) (e.g. cin/cout) has been used. This results in implementation-defined behavior, which in this case results in undefined behavior as I/O stops working.

If this function is called after I/O has occurred on the standard stream, the behavior is implementation-defined: implementations range from no effect to destroying the read buffer.

Your code should call ios_base::sync_with_stdio(false) before any I/O occurs. So it should be at the beginning of the main() function.