SRM 657 Div1 Easy Problem Sets
二分探索するだけ。
#include <bits/stdc++.h> using namespace std; #define REP(i,n) for(int i=0;i<(int)(n);i++) #define ll long long class ProblemSets { public: bool judge(ll E,ll EM,ll M,ll MH,ll H,ll num){ ll x=max(0ll,num-E); ll y=max(0ll,num-H); if(x>EM || y>MH) return false; if(num>=M && M+EM+MH-x-y<num) return false;; return true; } long long maxSets(long long E, long long EM, long long M, long long MH, long long H) { ll lb=0; ll ub=E+EM+M+MH+H; while(ub-lb>1){ ll mid=(lb+ub)/2; if(!judge(E,EM,M,MH,H,mid)) ub=mid; else lb=mid; } return lb; } }