けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 376 A - Candy Button (6Q, 灰色, 150 点)

「前回の値」を保持しながらシミュレーションする系

問題概要

ボタンを押すと、1 個の飴がもらえるが、前回飴をもらってから  C 秒間はもらえない。

高橋君は  N 回ボタンを押した。それぞれ  T_{1}, T_{2}, \dots, T_{N} 秒後に押した(これらは単調増加)。

何回飴をもらえたか?

考えたこと

「前回飴をもらった時刻」を表す変数 prev を用意して、それを管理しながらシミュレーションを回していこう。初期値が問題だが、たとえば

prev = -C

などとしておけばよい。こうしておけば、最初にボタンを押したときに確実に飴が出ることが保証される。

コード

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

int main() {
    int N, C, T;
    cin >> N >> C;

    int res = 0, prev = -C;  // prev: 前回の食べた時刻
    for (int i = 0; i < N; i++) {
        cin >> T;
        if (T - prev >= C) {
            res++;
            prev = T;
        }
    }
    cout << res << endl;
}