Official

B - バスツアー / Bus Tour Editorial by MMNMM


バスの移動にあわせて乗客の人数をシミュレーションすることで、この問題を解くことができます。 「\(B _ i\) 人まで降りる」という処理は、if 文や max/min などの関数を使うとよいでしょう。

最終行だけ \(B\) が入力されないことに気を付けてください。

実装例は以下のようになります。

#include <iostream>
using namespace std;

int main(){
    int N;
    cin >> N;

    long now = 0;
    for (int i = 0; i < N; ++i) {
        if (i + 1 < N) { // 最後の停留所より前なら
            int A, B;
            cin >> A >> B; // 乗ったり降りたりする
            now += A;
            now -= min<long>(now, B);
        } else { // 最後の停留所では
            int A;
            cin >> A;
            now += A; // 乗るだけ
        }
    }
    
    // 答えを出力
    cout << now << endl;
    return 0;
}
N = int(input())

ans = 0
for i in range(N):
    if i + 1 == N: # 最後の停留所では
        A = int(input())
        ans += A # 乗るだけ
    else: # それより前なら
        A, B = map(int, input().split()) # 乗ったり降りたりする
        ans += A
        ans -= min(ans, B)

# 答えを出力
print(ans)

posted:
last update: