二分答案的应用
题目描述
一只奶牛自己独居,它每天需要吃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; } }

浙公网安备 33010602011771号