二分代码
#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