原题:
C. Meme Problem
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
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.
Input
The first line contains t (1≤t≤10^3) — the number of test cases.
Each test case contains one integer d (0≤d≤10^3).
Output
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 ∣ ≤ 1 0 − 6 |(a+b)−a⋅b|≤10^{−6} ∣(a+b)−a⋅b∣≤10−6 and ∣ ( a + b ) − d ∣ ≤ 1 0 − 6 |(a+b)−d|≤10^{−6} ∣(a+b)−d∣≤10−6.
Example
inputCopy
7
69
0
1
4
5
999
1000
output
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
中文:
给你一个数d,让你找出两个数a和b,使得a+b=d,a×b=d,如果存在这两个数,输出Y然后输出a和b,否则输出N
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
int t;
double d,a,b;
int main()
{
ios::sync_with_stdio(false);
cin>>t;
while(t--)
{
cin>>d;
if(d*d-4*d<0)
{
cout<<"N"<<endl;
continue;
}
double tmp=sqrt(d*d-4*d);
cout<<fixed<<setprecision(9)<<"Y"<<" "<<(d+tmp)/2<<" "<<(d-tmp)/2<<endl;
}
return 0;
}
解答:
这题也太简单了吧-_-|||
2元一次方程求解的问题,上过初中的应该都能解决