公式
A - 訓練メニューの消化 / Completing the Training Menu 解説
by
A - 訓練メニューの消化 / Completing the Training Menu 解説
by
MMNMM
初心者の方へ
- AtCoder をはじめたばかりで何をしたらよいか分からない方は、まずは practice contest の問題A「Welcome to AtCoder」を解いてみてください。基本的な入出力の方法が載っています。
- また、プログラミングコンテストの問題に慣れていない方は、AtCoder Beginners Selection の問題をいくつか解いてみることをおすすめします。
- C++入門 AtCoder Programming Guide for beginners (APG4b) は、競技プログラミングのための C++ 入門用コンテンツです。
- Python入門 AtCoder Programming Guide for beginners (APG4bPython) は、競技プログラミングのための Python 入門用コンテンツです。
エクササイズ \(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')
投稿日時:
最終更新:
