题目分析
x
a
∗
y
b
∗
z
c
=
a
a
∗
b
b
∗
c
c
∗
(
x
a
)
a
∗
(
y
b
)
b
∗
(
z
c
)
c
x^a*y^b*z^c =a^a*b^b*c^c*(\frac{x}{a})^a *(\frac{y}{b})^b*(\frac{z}{c})^c
xa∗yb∗zc=aa∗bb∗cc∗(ax)a∗(by)b∗(cz)c
≤
a
a
∗
b
b
∗
c
c
∗
(
a
∗
x
a
+
b
∗
x
b
+
c
∗
x
c
a
+
b
+
c
)
(
a
+
b
+
c
)
\le a^a*b^b*c^c*(\frac{a*\frac{x}{a}+b*\frac{x}{b}+c*\frac{x}{c}}{a+b+c})^{(a+b+c)}
≤aa∗bb∗cc∗(a+b+ca∗ax+b∗bx+c∗cx)(a+b+c)
当且仅当 x a = y b = z c \frac{x}{a} =\frac{y}{b}=\frac{z}{c} ax=by=cz 时成立。
x
=
a
S
a
+
b
+
c
x=\frac{aS}{a+b+c}
x=a+b+caS
y
=
b
S
a
+
b
+
c
y=\frac{bS}{a+b+c}
y=a+b+cbS
z
=
c
S
a
+
b
+
c
z=\frac{cS}{a+b+c}
z=a+b+ccS
本题注意 a,b,c都为0的情况,以及精度问题
代码详解
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long s;
cin>>s;
long long a,b,c;
cin>>a>>b>>c;
if(a==0&&b==0&&c==0)
{
cout<<0<<" "<<0<<" "<<0<<endl;
return 0;
}
long long sum = a+b+c;
double x = (a*s*1.0)/(sum*1.0);
double y = (b*s*1.0)/(sum*1.0);
double z = (c*s*1.0)/(sum*1.0);
printf("%.10f %.10f %.10f\n",x,y,z);
return 0;
}