样例没过,二分答案,求调
查看原帖
样例没过,二分答案,求调
750689
CNzzc楼主2024/8/21 22:20
#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
#define up(i,j,k,l) for(int i=j;i<=k;i+=l)
#define down(i,j,k,l) for(int i=j;i>=k;i-=l)
using namespace std;
ll n,d,e;
ll p,q;
ll l,r,mid;
ll ans1,ans2;
int check(ll x)
{
	ll y=n/x;
	ll g=e*d;
	if(g<(x-1)*(y-1)+1){
		return 1;
	}
	else if(g>(x-1)*(y-1)+1){
		return 2;
	}
	else{
		return 3;
	}
}
void solve()
{
	cin>>n>>d>>e;
	l=1;
	r=n;
	mid=(l+r)>>1;
	ans1=0;
	ans2=0;
	while(l<=r && ans1==0){
		mid=(l+r)>>1;
		//cout<<mid<<endl;
		switch(check(mid)){
			case 1:
				r=mid-1;
				break;
			case 2:
				l=mid+1;
				break;
			case 3:
				ans1=mid;
				break;
		}
		if(ans1){
			break;
		}
	}
	if(ans1){
		ans2=n/ans1;
		if(ans1>ans2){
			swap(ans1,ans2);
		}
		cout<<ans1<<' '<<ans2;
	}
	else{
		cout<<"NO";
	}
	cout<<endl;
    return;
}
int main()
{
    //ios::sync_with_stdio(false);
    //cin.tie(0);
    //freopen(".in","r",stdin);
    //freopen(".out","w",stdout);
    int _=1;
	cin>>_;
    while(_--){
        solve();
    }
    return 0;
}
2024/8/21 22:20
加载中...