1. 程式人生 > >常州大學新生寒假訓練會試 F-大佬的生日大禮包

常州大學新生寒假訓練會試 F-大佬的生日大禮包

題目戳這裡
對於三種禮物來說,都需要用到一個a、一個b,所以抽象來說每個禮物對應a、b、c。於是二分答案,見程式碼

#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <cstdio>
#include <string>
#include <cstring>
#include <vector>
#include <set>
#define LL long long
#define INF 0x3f3f3f3f #define MOD 998244353 const int maxn = 1e5 + 5; using namespace std; bool judge(int a, int b, int c, int x){ a -= x; b -= x; if(a < 0 || b < 0) return false; if(a + b + c < x) return false;//保證了有x份 if(a > b) swap(a,b); if(b > c) swap(b,c); if
(a + b < x / 2) return false;//保證不相鄰 return true; } int main(){ int T; scanf("%d",&T); while(T--){ int a,b,c; scanf("%d%d%d",&a,&b,&c); int l = 0, r = min(a,b); int ans = 0, m; while(l <= r){ m = (l + r) / 2; if
(judge(a,b,c,m)){ ans = m; l = m + 1; } else r = m - 1; } printf("%d\n",ans); } } /* 2 4 4 0 1 1 1 */