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

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

AtCoder ABC 302 A - Attack (7Q, 灰色, 100 点)

サーバル問題 (ABC 153 A) の焼き直し問題。今度は制約が大幅に強化して、long long 型についても学ぶ問題となっている。

問題概要

体力が  A の敵がいます。あなたは、1 回攻撃をすることで敵の体力を  B 減らすことができる。

敵の体力を 0 以下にするためには、最小で何回攻撃をする必要があるか?

制約

  •  1 \le A, B \le 10^{18}

考えたこと

求めたい値は、 A B で割ったときの商を  q としたときに、

  •  A B で割り切れるとき: q
  •  A B で割り切れないとき: q + 1 回( q 回攻撃後に敵の体力が余るため)

となる。これは、いわゆる切り上げ処理である。答えは「 A + B - 1 B で割ったときの商」に一致する。その理由については、次の記事を参照。

drken1215.hatenablog.com

コード

今回、C++ では 32 bit 整数である int 型を用いるとオーバーフローしてしまうことに注意しよう。64 bit 整数である long long 型を用いている。

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

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