0分求调
查看原帖
0分求调
552018
Andrews123楼主2024/5/7 19:29
#include <bits/stdc++.h>
using namespace std;
int n;
int calc(int x) {
// 开始买 x 根冰棍,实际能吃的冰棍数
    int total = x;
    // total 是吃到的冰棍数量
    // x 是目前手里的棒子数量
    while(x>=3) { // 当手里的棒子还可以换冰棍
        total+=x/3;//能吃的冰棍数量增加
        x-=x/3;//手里的棒子数量,减去刚才换冰棍用掉的数量,加上刚吃的冰棍数量
    }
    return total;
}
int main() {
    int l, r, mid, ans;
    cin >> n;
    l = 1; r = 3*n;
    ans = 0;
    while(l <= r) {
        mid = (l + r) / 2;
        if(calc(mid) >= n) { // 如果买 mid 个冰棍,实际上可以吃到不少于 n 个冰棍
            ans=min(ans,mid); // 记录答案
            r=mid-1; // 限定在左半边
        } else
            l=mid+1; // 限定在右半边
    }
    cout << ans << endl;
    return 0;
}
2024/5/7 19:29
加载中...