天天看點

cf Educational Codeforces Round 54 C. Meme Problem

原題:

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

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元一次方程求解的問題,上過國中的應該都能解決