CF1076C Meme Problem
题意:
T T T组询问,给出一个非负整数 d d d,请你找出两个非负实数 a a a和 b b b,使得 ( a + b = d ) & & ( a ∗ b = d ) (a+b=d)\&\&(a*b=d) (a+b=d)&&(a∗b=d), 0 ≤ d ≤ 1 e 3 0≤d≤1e3 0≤d≤1e3。
思路:
韦达定理:
对于一元二次函数
a
x
2
+
b
x
+
c
=
0
,
(
a
≠
0
)
ax^{2}+bx+c=0,(a\neq0)
ax2+bx+c=0,(a=0),两根
x
1
,
x
2
x_1,x_2
x1,x2有以下关系.
- x 1 + x 2 = − b a x_1+x_2=-\frac{b}{a} x1+x2=−ab
- x 1 ∗ x 2 = c a x_1*x_2=\frac{c}{a} x1∗x2=ac
构造出符合题意的一元二次函数: x 2 − d x + d = 0 , ( a ≠ 0 ) x^{2}-dx+d=0,(a\neq0) x2−dx+d=0,(a=0)
- 利用判别公式 Δ = b 2 − 4 a c \Delta =b^{2}-4ac Δ=b2−4ac判是否存在解。
- 利用求根公式 x = − b ± b 2 − 4 a c 2 a x=\frac{-b\pm\sqrt{b^2-4ac}}{2a} x=2a−b±b2−4ac求根。
Code:
int main(){
double d;
int t;
cin>>t;
while(t--){
cin>>d;
if(d*d-4*d<0){//判别公式
cout<<"N"<<endl;
}
else{//求根公式
double x1=(d+sqrt(d*d-4*d))/2;
double x2=(d-sqrt(d*d-4*d))/2;
printf("Y %.9f %.9f\n",x1,x2);
}
}
return 0;
}