公式

A - 訓練メニューの消化 / Completing the Training Menu 解説 by MMNMM


初心者の方へ

エクササイズ \(i\) を使ったトレーニングが何回行えるかは、それ以外のトレーニングをどのように行ったかとは関係なく \(\left\lfloor\dfrac{A _ i}K\right\rfloor\) 回です(ここで、実数 \(x\) に対して \(\lfloor x\rfloor\) は \(x\) を超えない最大の整数を表します)。

なので、全体でトレーニングを行える回数は \(\left\lfloor\dfrac{A _ 1}K\right\rfloor+\left\lfloor\dfrac{A _ 2}K\right\rfloor+\cdots+\left\lfloor\dfrac{A _ N}K\right\rfloor\) 回までとなります。 この値を計算し、\(M\) との大小関係を判定して適切な文字列を出力することでこの問題を解くことができます。

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

#include <iostream>
using namespace std;

int main() {
    int N, M, K;
    cin >> N >> M >> K;
    long train_count = 0;
    for (int i = 0; i < N; ++i) { // それぞれのエクササイズに対して
        int A;
        cin >> A;
        train_count += A / K; // A / K 回トレーニングを行うことができる
    }
    if (train_count >= M) { // M 回以上トレーニングができるなら
        cout << "Yes" << endl;
    } else {
        cout << "No" << endl;
    }
    return 0;
}
N, M, K = map(int, input().split())

A = list(map(int, input().split()))

train_count = 0
for a in A: # それぞれのエクササイズに対して
    train_count += a // K # a // K 回トレーニングを行うことができる

if train_count >= M: # M 回以上トレーニングができるなら
    print('Yes')
else:
    print('No')

投稿日時:
最終更新: