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

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

AtCoder ABC 153 A - Serval vs Monster (灰色, 100 点)

これはとても教育的な問題!!

問題概要

HP が  H であるモンスターとサーバルは戦っている。

1 回の攻撃で HP を  A だけ減らすことができる。HP が 0 以下になるのに必要な攻撃回数を求めよ。

解法 (1)

 H A で割ったときに、余りがあるならば追加で 1 回の攻撃が必要である。つまり

  •  H A で割り切れるとき:H / A
  •  H A で割り切れないとき:H / A + 1

となる。

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

int main() {
    int H, A;
    cin >> H >> A;
    
    if (H % A == 0)
        cout << H / A << endl;
    else
        cout << H / A + 1 << endl;
}

 

解法 (2)

上記の解法は、実はワンライナーで書ける!!!

( H + A - 1) / A

極めて頻出なので覚えてもいいと思う。なぜこのように書けるのかは、ぜひ色んな値を代入して、確かめて見るとよさそう。

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

int main() {
    int H, A;
    cin >> H >> A;
    cout << (H + A - 1) / A << endl;
}