1 条题解

  • 0
    @ 2026-3-10 8:52:06

    文字教学

    这道题可以用二分查找解决,核心思路是:

    1. 定义函数 cal(x) 计算买 x 根冰棍时,通过兑换总共能吃到的冰棍数(包括兑换的)。
    2. 因为买的冰棍越多,总数量越大,所以可以二分查找最小的 x,使得 cal(x) ≥ n
    3. 二分范围:左边界 l=1,右边界 r=n(买 n 根肯定够)。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    
    int n;
    
    int cal(int x) {
        int res = x, s = x;
        while (s >= 3) {
            int h = s / 3;
            res += h;
            s = h + s % 3;
        }
        return res;
    }
    
    int main() {
        cin >> n;
        int l = 1, r = n;
        while (l < r) {
            int mid = (l + r) / 2;
            if (cal(mid) >= n) r = mid;
            else l = mid + 1;
        }
        cout << l << endl;
        return 0;
    }
    
    • 1

    信息

    ID
    7414
    时间
    1000ms
    内存
    128MiB
    难度
    3
    标签
    (无)
    递交数
    5
    已通过
    4
    上传者