二分答案的应用

题目描述
一只奶牛自己独居,它每天需要吃1个水果和花费X元交暖气费。现在奶牛家里有F个水果和D元。奶牛最多能独居多少天?奶牛可以去超市买水果,超市每个水果P元。
输入
多组测试数据。
第一行,一个整数G,表示有G组测试数据。1<=G<=10。
每组测试数据格式:
一行,4个整数X,F,D,P。1<=X,F,D,P<=2000000000。

输出
共G行,每行一个整数。
样例输入 Copy
5
3 5 100 10
2 17 20 1
1 97 98 1
16 4 8 2
17 1 2000000000 4
样例输出 Copy
11
10
97
0
95238095


套用二分模板,对答案进行二分

(check函数里注意判断水果数大于当前天数的情况,因为这个卡了半天。。。)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll g, x, f, d, p, ans;
int check(ll a) {
    if (f >= a) {
        if (x * a <= d) return 1;
        return 0;
    } else {
        if ((a - f)*p + x * a <= d) return 1;
        return 0;
    }
}
int main() {
    ll l, r, mid;
    cin >> g;
    while (g--) {
        l = 0, r = 2000000000;
        cin >> x >> f >> d >> p;
        while (l <= r) {
            mid = (l + r) >> 1;
            if (check(mid) == 1) l = mid + 1, ans = mid;
            else r = mid - 1;
        }
        cout << ans << endl;
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值