1 条题解

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

    📝 题目大意

    已知高桥君 NN 岁时身高为 TT 厘米。在 00 岁到 XX 岁之间,每年身高增长 DD 厘米;在 XX 岁到 NN 岁之间身高不变。求他在 MM 岁时的身高。

    💡 解题思路

    1. 题目分析:数据范围极小(N100N \leq 100),可以直接模拟。但关键是理解分段逻辑:身高只在 [0,X][0, X] 期间变化,之后恒定。
    2. 算法推导
      • 设出生时(00 岁)身高为 H0H_0,则 T=H0+XDT = H_0 + X \cdot D,即 H0=TXDH_0 = T - X \cdot D
      • MXM \geq X 时,身高已经定型,与 NN 岁时相同,直接输出 TT
      • M<XM < X 时,身高为 $H_0 + M \cdot D = T - X \cdot D + M \cdot D = T - (X - M) \cdot D$。代码中 T - (X - M) * D 正是这个公式的体现——从稳定高度 TT 往回倒推还未长完的 (XM)(X-M) 年。
    3. 边界与细节
      • MM 可能为 00(出生当天),公式 TXDT - X \cdot D 仍然成立,根据限制条件身高不会为负。
      • MXM \geq X 的边界是 M=XM = X 时归入第一分支,此时 (X - M) * D = 0,两分支等价,但分到第一分支更符合"已经停止生长"的直觉。

    ⏱️ 复杂度分析

    • 时间复杂度O(1)O(1),仅做常数次算术运算与比较。
    • 空间复杂度O(1)O(1)

    💻 标准代码 (C++)

    #include<bits/stdc++.h>
    using namespace std;
    int main() {
        int N, M, X, T, D;
        cin >> N >> M >> X >> T >> D;
        if (M >= X) {
            // M 岁之后身高已经不再变化,直接输出 N 岁时的身高 T
            cout << T << endl;
        } else {
            // M 岁还在生长期,身高比 T 少 (X - M) 年的增长量
            cout << T - (X - M) * D << endl;
        }
        return 0;
    }
    
    • 1

    信息

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