题意:给定a b c,划分3个集合,使得a和c不在同一集合,且使最大的集合最小 虽然题目简单,但一定要考虑仔细啊T^T 题解:由于a b c只有3000,可以直接二分solve
#include
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
int a,b,c;
bool check(int x){
if(x=(c+max((b-(x-a)),0))) return 1;
if(x>=c&&2*x>=(a+max((b-(x-c)),0))) return 1;
return 0;
}
int main(){
int t;scanf("%d",&t);
while(t--){
scanf("%d%d%d",&a,&b,&c);
int l=1,r=max(a,max(b,c)),ans=inf;
int m;
while(l>1;
// printf("l:%d r:%d m:%d\n",l,r,m);
if(check(m)){
ans=min(ans,m);//
r=m-1;
}else{
l=m+1;
}
}
printf("%d\n",ans);
}
return 0;
}
直接贪心也可
#include
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
int a,b,c;
int main(){
int t;scanf("%d",&t);
while(t--){
scanf("%d%d%d",&a,&b,&c);
int ans;
if(a>c) swap(a,c);
if(b+cb) ans=max(b+a,(c+1)/2);
else ans=x+a;
}
printf("%d\n",ans);
}
return 0;
}