E - Perfect Bus Editorial by kyopro_friends


最初の時点で0人乗っていたとしてシミュレーションします。

もしシミュレーションの過程でバスに乗っている人数が負になった場合、”実はバスにはもっと人が乗っていた”と思うことで、その時点でバスに乗っている人数は0だったことにします。

例えば \(A=(1,-2,2,-1,-2,3)\) のときシミュレーションは次のように進行します:

  • 最初、バスに乗っている人数は0である
  • 1人乗ってきて、バスに乗っている人数は1になる
  • 2人降りて、バスに乗っている人数は-1になってしまう。”実はバスにはもっと人が乗っていた”ことにして、バスに乗っている人数は0になったことにする
  • 2人乗ってきて、バスに乗っている人数は2になる
  • 1人降りて、バスに乗っている人数は1になる
  • 2人降りて、バスに乗っている人数は-1になってしまう。”実はバスにはもっと人が乗っていた”ことにして、バスに乗っている人数は0になったことにする
  • 3人乗ってきて、バスに乗っている人数は3になる

このようにして最後までシミュレーションし終えたときの人数が答えです。なぜなら、これ以上人数を減らすと”実はバスにはもっと人が乗っていた”を最後に発動したタイミングの人数が負になってしまうためです。

実装例(Python)

input()
crr=0
for a in map(int,input().split()):
  crr=max(crr+a,0)
print(crr)

posted:
last update: