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

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

AtCoder ABC 357 A - Sanitize Hands (7Q, 灰色, 100 点)

意外とミスりやすいかもしれない。慎重に for 文を書こう。

問題概要

 N 個の正の整数  H_{1}, H_{2}, \dots, H_{N} と、正の整数  M が与えられる。

 M に対して、 H_{1}, H_{2}, \dots, H_{N} を順に引いていく。このとき、 M が負にならずに引ける最大個数を求めよ。

解法

実際に順番に  M から引いていって、 M \ge 0 であればカウントするようにすれば OK。

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

int main() {
    int N, M;
    cin >> N >> M;
    vector<int> H(N);
    for (int i = 0; i < N; ++i) cin >> H[i];
    
    // M から H[0], H[1], ... を引いていく
    int res = 0;
    for (int i = 0; i < N; ++i) {
        M -= H[i];
        if (M >= 0) ++res;
    }
    cout << res << endl;
}