1 条题解

  • 0
    @ 2026-6-19 10:30:35

    📝 题目大意

    给定体力值 AA 和每次攻击减少的体力值 BB,求最少需要多少次攻击才能使体力值降至 00 或以下。

    💡 解题思路

    1. 题目分析:本质是求 AB\lceil \frac{A}{B} \rceil(向上取整)。数据范围 A,B1018A, B \leq 10^{18},需要使用 long long(64 位整数),直接循环模拟会超时。
    2. 算法推导:整数除法默认向下取整,向上取整的等价公式为 AB=A+B1B\lceil \frac{A}{B} \rceil = \frac{A + B - 1}{B}(整数除法)。即 ans = (A + B - 1) / B
    3. 边界与细节
      • AA 恰好能被 BB 整除时(如 A=6,B=3A=6, B=3),(6+31)/3=8/3=2(6+3-1)/3 = 8/3 = 2,结果正确。
      • AA 不能被 BB 整除时(如 A=7,B=3A=7, B=3),(7+31)/3=9/3=3(7+3-1)/3 = 9/3 = 3,结果正确。
      • 注意使用 long long 而非 int,否则大样例(101810^{18} 级别)会溢出导致 WA。

    ⏱️ 复杂度分析

    • 时间复杂度O(1)O(1),仅一次除法运算。
    • 空间复杂度O(1)O(1),仅使用常数个变量。

    💻 标准代码 (C++)

    #include <iostream>
    using namespace std;
    int main() {
        long long A, B;          // 64 位整数,防止溢出
        cin >> A >> B;
        long long ans = (A + B - 1) / B;  // 向上取整:ceil(A/B)
        cout << ans << endl;
        return 0;
    }
    
    • 1

    信息

    ID
    711
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者