这个二分样例过了,不知道错哪里了
查看原帖
这个二分样例过了,不知道错哪里了
890321
mooktian楼主2024/1/9 10:57
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll k,n,e,d,l,r,b;
ll f(ll x) {
	return x*x - b*x + n;
}
ll bsearch(ll l ,ll r,ll b,ll c) {
	if((f(l) > 0 && f(r) > 0)||(f(l) < 0 && f(r) < 0)) return -1;
	while(l < r) {
		ll mid = (l + r) >> 1;
		if(f(mid) == 0) return mid;
		else if(f(l)*f(mid) > 0) l = mid+1;
			 else r = mid;	 	
	}
	return -1;
}
int main(){
scanf("%lld",&k);
while(k--) {
	scanf("%lld %lld %lld",&n,&e,&d);
	b = n + 2 - e*d;
	l = 1,r = sqrt(n)+1;
	//printf("b = %lld c = %lld \n",b,n);
	ll p = bsearch(l,r,b,n);
	if(p != -1) printf("%lld %lld\n",p,n/p);
	else printf("NO\n");
}
return 0;
}

2024/1/9 10:57
加载中...