公式

A - Humidifier 1 解説 by MtSaka


初心者の方へ

この問題は時系列順に水がいくら残っているかをシミュレーションすることが求められています。

水の追加の時に、その時点での水の量はそれ以前に最後に水を追加した時からの経過時間とその水の追加後の水の量から計算できます。具体的には、水の残量は \(0\) リットル未満にならないことに注意して、\(V\) リットルある時から \(T\) 単位時間経過した時点で水は \(\max(0,V-T)\) リットルです。

この処理を時系列順に計算することで水の量をシミュレーションすることができます。

実装例(C++):

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;
    int volume = 0;
    int now = 0; //直前の水の追加の時刻 (最初は0とする)
    for (int i = 0; i < n; ++i) {
        int t, v;
        cin >> t >> v;
        volume -= (t - now); //前の水の追加からの経過時間
        volume = max(volume, 0);
        volume += v; //水の追加
        now = t;
    }
    cout << volume << endl;
}

投稿日時:
最終更新: