Panasonic Programming Contest 2020 C.Sqrt Inequality
Problem Statement
Does a + b < c \sqrt{a}+\sqrt{b}<\sqrt{c} a+b<c hold?
Constraints
1≤a,b,c≤1e9
All values in input are integers.
Input
Input is given from Standard Input in the following format:
a b c
Output
If a + b < c \sqrt{a}+\sqrt{b}<\sqrt{c} a+b<c, print Yes; otherwise, print No.
Sample Input 1
2 3 9
Sample Output 1
No
Sample Input 2
2 3 10
Sample Output 2
Yes
这题说实话挺考验细心程度的,首先直接浮点数有精度问题算得太迷了,我们考虑转化为整型算,证明如下:
a
+
b
<
c
\sqrt{a}+\sqrt{b}<\sqrt{c}
a+b<c
a
+
b
+
2
a
b
<
c
a+b+2\sqrt{ab}<c
a+b+2ab<c
2
a
b
<
c
−
a
−
b
2\sqrt{ab}<c-a-b
2ab<c−a−b
4
a
b
<
(
c
−
a
−
b
)
2
4{ab}<(c-a-b)^2
4ab<(c−a−b)2
细心的你有没有发现我标红的部分呢,没错,就按上述方法判断的话还是会错一个点,就在标红的地方,不难发现左边恒大于0,右边不一定大于0,所以要特判一下
c
>
a
+
b
c>a+b
c>a+b,AC代码如下:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
unsigned long long a,b,c,l,r;
cin>>a>>b>>c;
l=4*a*b,r=(c-a-b)*(c-a-b);
if(c<=a+b) puts("No");
else if(l<r)puts("Yes");else puts("No");
}