1 条题解

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

    📝 题目大意

    给定 NN 种商品,每种商品单价 PiP_i、购买数量 QiQ_i。计算总金额 total=Pi×Qitotal = \sum P_i \times Q_i,若 total<Stotal < S 则需额外支付运费 KK,否则免运费。输出最终应付金额。

    💡 解题思路

    1. 题目分析N100N \leq 100S,K,Pi10000S, K, P_i \leq 10000Qi100Q_i \leq 100,数据范围极小,直接模拟即可。totaltotal 最大为 100×10000×100=108100 \times 10000 \times 100 = 10^8,在 int 范围内(约 2.1×1092.1 \times 10^9),无需使用 long long
    2. 算法推导
      • 读入 N,S,KN, S, K,初始化 total = 0
      • 循环 NN 次,每次读入 Pi,QiP_i, Q_i,累加 total += P_i * Q_i
      • 判断:若 total < S,则 total += K
      • 输出 total
    3. 边界与细节:当 total=Stotal = S 时,运费为 00 日元(即"不少于 SS"包含等于的情况)。本代码使用 total < S 判断,正确覆盖了 == 时免运费的边界。

    ⏱️ 复杂度分析

    • 时间复杂度O(N)O(N),只需遍历所有商品一次。
    • 空间复杂度O(1)O(1),仅使用常数个变量。

    💻 标准代码 (C++)

    #include <iostream>
    using namespace std;
    int main() {
        int N, S, K;
        cin >> N >> S >> K;
        int total = 0;
        for (int i = 0; i < N; i++) {
            int P, Q;
            cin >> P >> Q;
            total += P * Q;       // 累加每种商品的总价:单价 × 数量
        }
        if (total < S) {          // 总金额不足 S 日元时,需要支付运费
            total += K;
        }
        cout << total << endl;
        return 0;
    }
    
    • 1

    信息

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