解析
二分答案,对于当前的 m i d mid mid 先贪心的放置 2 2 2 能量的,后放置 1 1 1 能量的,查看是否能够放满。
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define inf 1e18
const int mod=1e9+7;
const int N=2e5+5;
int k,x,y;
bool check(int mid){
if(x+2*y<mid*k) return false;
int t=y/mid;
int p=y%mid;
int ans=0;
if(k>2*(t+1)) ans+=(k-2*(t+1))*p;
if(k>2*t) ans+=(k-2*t)*(mid-p);
return ans<=x;
}
void solve(){
cin>>k>>x>>y;
if(x+2*y<k){
cout<<0<<endl;
return;
}
int l=1,r=3e9;
while(l<r){
int mid=l+r+1>>1;
if(check(mid)) l=mid;
else r=mid-1;
}
cout<<l<<endl;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int tt=1;
cin>>tt;
while(tt--) solve();
return 0;
}