二分答案
吃葡萄
http://www.nowcoder.com/questionTerminal/14c0359fb77a48319f0122ec175c9ada
#include <bits/stdc++.h> using namespace std; bool check(long long num,long long a[]){ if (a[2]<=num) { return true; } if (a[2]-num>num) { return false; } return a[0]+a[1]+a[2]-2*num<=num; } int main() { int t; cin>>t; while(t--){ long long a[3]; for(int i=0;i<3;i++) cin>>a[i]; sort(a,a+3); long long l=1,r=(long long)1e18; long long mid,ans; while(l<=r){ mid=(l+r)/2; if(check(mid,a)){ ans=mid; r=mid-1; } else{ l=mid+1; } } cout<<ans<<endl; } return 0; }时间复杂度最多是log(1e18)也就是64,相当于常数级别看作O(1)。