1 条题解

  • 0
    @ 2026-5-4 22:18:27

    解题思路

    根据题意,需要满足两个条件:

    • 必须修完整条高速公路,因此至少需要 nn 天。
    • 至少一半的路面应为高质量,即至少需要 needG=n2\text{needG} = \lceil \frac{n}{2} \rceil 个单位在好天气铺设。

    如何计算满足第二个条件所需的最少天数(记为 totalG\text{totalG})?
    注意,前 totalG\text{totalG} 天可以表示为若干个完整的 g+bg+b 天周期(每个周期中有 gg 个好天气),再加上剩余的 1remg1 \le \text{rem} \le g 天(若 rem=0\text{rem} = 0,则可去掉最后一个 bb 天以最小化天数)。

    计算方法如下:

    1. 先计算需要多少个完整的 g+bg+b 周期:$\text{totalG} = \lfloor \frac{\text{needG}}{g} \rfloor \cdot (g + b)$。
    2. 如果 needGmodg>0\text{needG} \bmod g > 0,则加上余数 needGmodg\text{needG} \bmod g
    3. 如果 needGmodg=0\text{needG} \bmod g = 0,则说明最后一个周期中实际上不需要完整的 gg 天?这里需要再减去 bb,因为最后一个 gg 天足够后不需要后面的 bb 天。

    最终答案为 max(n,totalG)\max(n, \text{totalG})


    C++ 代码实现

    #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 n, g, b;
            cin >> n >> g >> b;
    
            ll needG = (n + 1) / 2;  // 至少需要的高质量天数
            ll totalG = (needG / g) * (g + b);
            if (needG % g == 0) {
                totalG -= b;
            } else {
                totalG += needG % g;
            }
    
            cout << max(n, totalG) << '\n';
        }
        return 0;
    }
    • 1

    信息

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