二分,5个样例都过了10分
查看原帖
二分,5个样例都过了10分
366430
AndyC楼主2022/10/29 16:06
#include<bits/stdc++.h>
using namespace std;

long long k,n,ans,a,b,erfen;
long long x,y;
bool check(long long cha){
	if(a%2!=0||b%2!=0){
		x=(ans-cha+1)/2;
	}
	else x=(ans-cha)/2;
	y=x+cha;
	if(x*y>=n){
		return false; 
	}
	return true;
} 
bool truecheck(long long ch){
	x=(ans-ch)/2;
	y=x+ch;
	if(x*y==n){
		cout<<x<<' '<<y<<endl;
		return true;
	}
	return false;
}
int main(){
	cin>>k;
	while(k--){
		ans=0;
		cin>>n>>a>>b; 
		ans=a*b;
		ans=n-ans;
		ans+=2;
		bool flag=false;
		//二分一个cha 
		long long l=0,r=ans;
		while(l<r){
			long long mid=(l+r)/2;
			if(truecheck(l)||truecheck(r)||truecheck(mid)){
				flag=1;
				break;
			}
			if(check(mid)){
				r=mid;
			} 
			else l=mid+1;
		}
		if(!flag&&!truecheck(l)&&!truecheck(r)) cout<<"NO"<<endl;
		
	}
	return 0;
}
2022/10/29 16:06
加载中...