题解:P16349 「Gensokyo OI Round 1」坊巷逸闻
qinghuatiaojistudent
·
·
题解
本题已知 A(0,0) , B(0,a) , C(b,0) , D(c,a) ,点 F 是线段 CD 的中点,需要求出一个符合要求的点 E ,使 S_{ACFE} = S_{BDFE} 。
首先,我们发现四边形 ACFE 与四边形 BDFE 都是不规则的(指不是平行四边形和梯形),无法通过面积公式求面积。因此,我们考虑用割补法拼成几个规则的面积之和或面积之差。
我们先求 F 的坐标,因为 F 是 CD 的中点,且 C(b,0) , D(c,a) ,所以可以得到 F(c+\frac{b-c}{2},\frac{a}{2}) ,即 F(\frac{b+c}{2},\frac{a}{2})。
如图,我们作 FH 垂直于 AB 于点 H ,可以得到 H(0,\frac{a}{2}) 。
然后我们设三角形 HEF 的面积为 x ,梯形 BDHF 的面积为 y ,则四边形 EFCA 的面积为 x+y 。
下一步就是等量代换。
如图,我们可以做一个类似“八字模型”的图形,让两个图形全等,然后设这两块图形的面积为 a 。
我们可以发现,两个图形全等,意味着 FH 平分整个长方形,即 a+y =x+(x+y)-a ,可以解出 x=a ,即它们的面积相等。
再根据三角形的面积公式,得出 HE \times \frac{b+c}{2} = \frac{a}{2} \times \frac {b-c}{2} 。
我们已知 AH = \frac{a}{2} ,因此,我们就可以求出 AE 的长度了。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
double a,b,c;
cin>>a>>b>>c;
double daan=a/2-abs((((c-b)/2)*(a/2))/(b+((c-b)/2)));
cout<<daan;
}