题意
小明要弄题集,每个题集包含三种难度的题,EM和MH可以当做两种难度的使用,问最大能弄出多少个题集。
思路
感觉O(1)的办法,不过懒(bu)得(hui)想(zuo),直接二分了。
二分答案,然后模拟一下,题目不够就借,如果借出负数就不行。
代码
class ProblemSetsEasy {
public:
bool Check(int n, int E, int EM, int M, int MH, int H)
{
if (E < n) EM -= (n-E);
if (EM < 0) return false;
if (M < n)
{
int need = n-M;
need -= min(need, EM);
if (need) MH -= need;
}
if (H < n) MH -= (n-H);
if (MH < 0) return false;
return true;
}
int maxSets(int E, int EM, int M, int MH, int H) {
int l = 0, r = INF, ans = 0;
while (l <= r)
{
int mid = MID(l, r);
if (Check(mid, E, EM, M, MH, H))
{
ans = mid;
l = mid+1;
}
else r = mid-1;
}
return ans;
}
};