二换一

a、b、c三个物品,两个可以换另一个,三个可以换一个奖品,求最多能换多少个奖品

 1 class Solution {
 2 public:
 3     int numberofprize(int a, int b, int c) {
 4         int lo = 0, hi = 1E9;
 5         int ret = 0;
 6 
 7         auto check = [&](int val) {
 8             int tmp = 0;
 9             int x = a, y = b, z = c;
10             x -= val, y -= val, z -= val;
11             if (x >= 0) tmp += x, x = 0;
12             if (y >= 0) tmp += y, y = 0;
13             if (z >= 0) tmp += z, z = 0;
14             return tmp / 2 >= -(x + y + z);
15         };
16 
17         while (lo <= hi) {
18             int mid = (lo + hi) >> 1;
19             if (check(mid)) {
20                 ret = mid;
21                 lo = mid + 1;
22             }
23             else {
24                 hi = mid - 1;
25             }
26         }
27         return ret;
28     }
29 };
原文地址:https://www.cnblogs.com/zhang-le/p/13621461.html