336494 C. Meme Problem

时间:2021-07-14
本文章向大家介绍336494 C. Meme Problem,主要包括336494 C. Meme Problem使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

336494 C. Meme Problem

Try guessing the statement from this picture:

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≤1031≤t≤103) — the number of test cases.

Each test case contains one integer d (0≤d≤103)(0≤d≤103).

Output

For each test print one line.

If there is an answer for the ii-th test, print "Y", and then the numbers a and b

If there is no answer for the ii-th test, print "N".

Your answer will be considered correct if |(a+b)−a⋅b|≤10−6|(a+b)−a⋅b|≤10−6 and |(a+b)−d|≤10−6|(a+b)−d|≤10−6.

Example

input

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 and a⋅b=d成立,如果存在,输出a和b

思路

  1. 观察式子 a+b=d and a⋅b=d,把第二个式子代入到第一个式子,化掉b,可得关于a的一元二次方程,此时d看成是系数。(或者用韦达定理来构成方程,并将a和b看成是方程的两个解)。
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		double d;
		cin>>d;
		double delta=d*d-4*d;
		if(delta<0)cout<<'N'<<endl;
		else
		{
			cout<<"Y ";
			cout<<fixed<<setprecision(9);
			cout<<(d+sqrt(delta))/2<<" "<<(d-sqrt(delta))/2<<endl;
		}
	}
	return 0;
}

原文地址:https://www.cnblogs.com/BeautifulWater/p/15010380.html