题意
a+b=da+b=da+b=d
a∗b=da*b=da∗b=d
T组测试数据,每组给你非负整数ddd,问方程是否存在非负解aaa和bbb,存在输出‘Y’,a,b,否则输出’N’。
思路
b=d−ab=d-ab=d−a
a∗(d−a)=da*(d-a)=da∗(d−a)=d,推得a2−da+da^2 - da + da2−da+d
通过求根公式(−b±b2−4ac2a\frac{-b±\sqrt{b^2-4ac}}{2a}2a−b±b2−4ac)可得aaa,然后求得bbb。
注意不要对负数开方!!!这种情况无解
如果aaa最大值也是负数,那就无解。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T; scanf("%d", &T);
while (T--)
{
int d; scanf("%d", &d);
if (d*d-4*d < 0) { printf("N\n"); continue; }
double ans = max((d+sqrt(d*d-4.0*d))/2, (d-sqrt(d*d-4.0*d))/2);
if (ans < 0) printf("N\n");
else printf("Y %.9f %.9f\n", ans, d-ans);
}
return 0;
}
/*
7
69
0
1
4
5
999
1000
*/