Yuulis.log

トンネルを抜けるとそこは参照エラーであった。

【AtCoder】ABC 376 A - Candy Button | 茶コーダーが解くAtCoder

atcoder.jp

実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 19

問題概要

押すと飴を1つもらえるボタンがあるが、前回飴をもらってからの経過時間が  C 秒未満である場合はもらえない。これから  T_i \: (i = 1, 2, \cdots, N) 秒後にボタンを押すとき、何個の飴をもらうことができるか求めよ。

制約

  • 入力は全て整数。
  •  1\leq N \leq 100
  •  1\leq C\leq 1000
  •  0\leq T_1 \lt T_2 \lt \cdots \lt T_N \leq 1000

考察

実際に1回ずつボタンを押していく様子をシミュレーションしていく。前回飴をもらった時刻を  \mathrm{time} としておき (初期値は  0) 、  i 回目にボタンを押すときについて、

  •  i = 1 のとき、無条件に飴をもらえる。  \mathrm{time} = T_i とする。
  •  i \geq 2 のとき、  T_i - \mathrm{time} ならば飴をもらえる。  \mathrm{time} = T_i とする。
  • それ以外のときは飴はもらえない。

とすればよい。

コード

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

#define rep(i, start, end) for (auto i = (start); (i) < (end); (i)++)

// ======================================== //

int main()
{
    int N, C;
    cin >> N >> C;
    vector<int> T(N);
    rep(i, 0, N) cin >> T[i];

    int ans = 0, time = 0;
    rep(i, 0, N)
    {
        if (i == 0)
        {
            ans++;
            time = T[i];
        }
        else if (T[i] - time >= C)
        {
            ans++;
            time = T[i];
        }
    }

    cout << ans << endl;
}

atcoder.jp

実装時間: 5分以内