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

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

Take a look at the end of these two programs:

https://atcoder.jp/contests/abc188/submissions/19361247

https://atcoder.jp/contests/abc188/submissions/19361394

One is correct and the other is not, even though in theory the one with std::min should be equivalent, since the first values of the arrays are all pairwise distinct.

EDIT: std::array variable holding fundamental types of local scope is not zero initialized (unlike other containers to my knowledge).

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

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

I've initialized array in the second submission and got AC. But I have no idea why your first solution works, it passed in 3 out of 3 tries.

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

    Seriously? Huh, why do you think it is like that, considering the fact, that the array should at least in theory be default initialized with zeores? Oh wait, it isn't?

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

      std::array declared locally goes on the stack and isn't zero-initialized (as with any locally declared primitive types).

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

      std::array, unlike std::vector, does not zero-initialize its elements by default. Use std::array<T, N> var{}; to zero-initialize.

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

      Array uses default initialization.

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

    Oh it says so in the documentation. Thank you, I falsely assumed that like other std containers its elements are also zero initialized.

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

      std::vector is zero-initialized because its data is allocated on the heap (even if the vector is declared locally).

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

      You should read warnings next time. Atcoder shows compilation log right below the code.

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

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