Meme Problem
Hazrat Ali

You are given a non-negative integer d. You have to find two non-negative real numbers a and b such that a+b=d and a⋅b=d.
The first line contains t (1≤t≤103) — the number of test cases.
Each test case contains one integer d (0≤d≤103).
For each test print one line.
If there is an answer for the i-th test, print "Y", and then the numbers a and b.
If there is no answer for the i-th test, print "N".
Your answer will be considered correct if |(a+b)−a⋅b|≤10−6 and |(a+b)−d|≤10−6.
7 69 0 1 4 5 999 1000
Y 67.985071301 1.014928699 Y 0.000000000 0.000000000 N Y 2.000000000 2.000000000 Y 3.618033989 1.381966011 Y 997.998996990 1.001003010 Y 998.998997995 1.001002005
Solution
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin >> t;
while (t--)
{
int d;
cin >> d;
double a, b;
bool found = false;
if (d == 0)
{
found = true;
a = 0;
b = 0;
}
else if (d * d - 4 * d >= 0)
{
found = true;
b = (-d + sqrt(d * d - 4 * d)) / -2.0;
a = d / b;
}
if (found)
{
cout << fixed << setprecision(9);
cout << "Y " << a << " " << b << endl;
}
else
{
cout << "N" << endl;
}
}
return 0;
}