- Quiz
- AC
- 解説
- editorialがないので書いておく
- 「3つのグループのうちの最大サイズはvに収まるか?」という判定関数を書いて二分探索
void solve(){
ll a,b,c;cin>>a>>b>>c;
if(a<c) swap(a,c);
ll right = max({a,b,c});
ll left = 0;
auto check = [&](ll center){
if(a>center){
ll a_rest = a-center;
if(c-center>0) return false;
ll b_rest = b-(center-c);
if(b_rest<0) b_rest = 0;
if(a_rest + b_rest <= center){
return true;
}else{
return false;
}
}
else{
ll gap = (center-a) + (center-c);
if(b-gap<=center){
return true;
}else{
return false;
}
}
debug("here is error");
return true;
};
while(left+1!=right){
ll center = (left+right)/2;
if(check(center)){
right = center;
}else{
left = center;
}
}
p(right);
}
int main(){
ll N;
cin>>N;
while(N--)solve();
return 0;
}