zoukankan      html  css  js  c++  java
  • CF 336494 C. Meme Problem

    336494 C. Meme Problem

    Try guessing the statement from this picture:

    img

    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;
    }
    
  • 相关阅读:
    简单明了理解Java移位运算符
    mybatis(1):入坑篇
    货币格式化
    100 doors
    Object调用静态方法
    Rust入门篇 (1)
    BOM-字节序标记
    【Linux】设定一个能输入中文的英文环境!
    正则表达式验证 输入内容为小数位不超过2位的数值
    创建一个springMVC项目总结
  • 原文地址:https://www.cnblogs.com/BeautifulWater/p/15010380.html
Copyright © 2011-2022 走看看