为什么数学可以,二分不行
查看原帖
为什么数学可以,二分不行
605945
luo_xiaoran楼主2022/10/29 16:10

二分代码

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
	int k;
	scanf("%d",&k);
	while(k--)
	{
		long long n,d,e;
		scanf("%lld%lld%lld",&n,&d,&e);
		int m=n+2-e*d,l=1,r=m,mid=(l+r)/2;
		while(l<mid&&mid<r)
		{
			if(mid*(m-mid)>n)
			{
				r=mid;
				mid=(l+r)/2;
			}
			else
			{
				l=mid;
				mid=(l+r)/2;
			}
		}
		if(mid*(m-mid)==n)
		{
			printf("%lld %lld\n",mid,m-mid);
		}
		else
		{
			printf("NO\n");
		}
	}
	return 0;
}

数学代码

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
	int k;
	scanf("%d",&k);
	while(k--)
	{
		long long n,d,e;
		scanf("%lld%lld%lld",&n,&d,&e);
		int m=n+2-e*d;
		long long m2=1ll*m*m;
		long long m_2=m2-1ll*4*n;
		int p_q=sqrt(m_2);
		int p=(p_q+m)/2;
		p=min(p,m-p);
		if(1ll*p*(m-p)==n)
		{
			printf("%d %d\n",p,(m-p));
		}
		else
		{
			printf("NO\n");
		}
	}
	return 0;
}

二分#3,#4AC,其余不是TLE而是WA?
数学全AC

2022/10/29 16:10
加载中...