「はじめて条件を満たす場所を捉える」という for 文の使い方をする
問題概要
飼っているモンスターの現在の HP は である。
種類の薬があって、それぞれ効き目は 小さい順に である。薬 を使うと HP は だけ増加する。
モンスターの HP を 以上にできるような、薬の番号の最小値を求めよ。
考え方
基本的には次のように考えればよい (0 始まりで考えている)。
for (int i = 0; i < N; ++i) { // HP が X 以上になるとき if (H + P[i] >= X) { cout << i+1 << endl; // 0 始まりを 1 始まりに直す break; } }
つまり、「はじめて条件を満たす瞬間を捉える」という for 文の使い方をするのだ。もし break
を怠ると、その後の もすべて出力されてしまうので注意。
コード
#include <bits/stdc++.h> using namespace std; int main() { int N, H, X; cin >> N >> H >> X; vector<int> P(N); for (int i = 0; i < N; ++i) cin >> P[i]; for (int i = 0; i < N; ++i) { if (H + P[i] >= X) { cout << i+1 << endl; break; } } }