Codeforces ~ 1076C ~ Meme Problem (一元二次方程求解)

在这里插入图片描述
在这里插入图片描述

题意

a+b=da+b=da+b=d
a∗b=da*b=dab=d
T组测试数据,每组给你非负整数ddd,问方程是否存在非负解aaabbb,存在输出‘Y’,a,b,否则输出’N’。

思路

b=d−ab=d-ab=da
a∗(d−a)=da*(d-a)=da(da)=d,推得a2−da+da^2 - da + da2da+d
通过求根公式(−b±b2−4ac2a\frac{-b±\sqrt{b^2-4ac}}{2a}2ab±b24ac)可得aaa,然后求得bbb
注意不要对负数开方!!!这种情况无解
如果aaa最大值也是负数,那就无解。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int T; scanf("%d", &T);
    while (T--)
    {
        int d; scanf("%d", &d);
        if (d*d-4*d < 0) { printf("N\n"); continue; }
        double ans = max((d+sqrt(d*d-4.0*d))/2, (d-sqrt(d*d-4.0*d))/2);
        if (ans < 0) printf("N\n");
        else printf("Y %.9f %.9f\n", ans, d-ans);
    }
    return 0;
}
/*
7
69
0
1
4
5
999
1000
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值