1 条题解

  • 0
    @ 2026-9-6 20:54:56

    夏日水费 题解

    题意简述

    给定 TT 个用水量 xx,按照三段阶梯水价分别输出应缴水费:

    $$f(x)=\begin{cases} 3x & x \le 10\\ 30 + 5(x-10) & 10 < x \le 30\\ 130 + 8(x-30) & x > 30 \end{cases}$$

    思路

    本题是基础的分类讨论 + 模拟题。对每个 xx 判断其落在哪一段区间,用对应公式计算即可。

    注意两点:

    1. 边界处理:第 2 段是 10<x3010 < x \le 30,第 3 段是 x>30x > 30x=10x = 10x=30x = 30 恰好是分段点,判断时要用 x <= 10x <= 30 依次判断,避免重复或遗漏。
    2. 数据范围TT 可达 10610^6xx 可达 10910^9,最大水费约为 130+8×109130 + 8 \times 10^9,远超 int 范围,务必使用 long long

    复杂度

    • 时间复杂度:O(T)O(T)
    • 空间复杂度:O(1)O(1)

    参考代码

    #include <bits/stdc++.h>
    using namespace std;
    using ll = long long;
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        int T;
        cin >> T;
        while (T--) {
            ll x;
            cin >> x;
            ll ans;
            if (x <= 10) ans = 3 * x;
            else if (x <= 30) ans = 30 + 5 * (x - 10);
            else ans = 130 + 8 * (x - 30);
            cout << ans << '\n';
        }
        return 0;
    }
    

    分档说明

    子任务 分数 约束 说明
    1 30 T1000T \le 1000 直接模拟即可
    2 10 所有 x10x \le 10 答案恒为 3x3x,可特判
    3 60 无特殊限制 O(T)O(T) 模拟并注意 long long
    • 1

    信息

    ID
    251
    时间
    1000ms
    内存
    256MiB
    难度
    1
    标签
    递交数
    144
    已通过
    25
    上传者