Angle and Squares UVA

来源:互联网 发布:dev.mysql.com 编辑:程序博客网 时间:2024/05/17 07:20

几何分析的一道题目,如果在这个角度内部放置的正方形能够达到对角线在同一条直线上,那么就可以保证得到的阴影部分的面积最大,以此求出正方形和两条直线的两个交点(这两个交点的横坐标的之差以及纵坐标之差均为正方形的边长之和,同时也直到这两个点所在的直线的方程,那么就可以解出两个交点的坐标)。所以阴影部分的面积也就是两个交点和原点所围成的三角形的面积减去正方形面积之和的一半(可以画图得到),具体实现见如下代码:

#include<iostream>#include<vector>#include<string>#include<set>#include<stack>#include<queue>#include<map>#include<algorithm>#include<cmath>#include<iomanip>#include<cstring>#include<sstream>#include<cstdio>#include<deque>#include<functional>using namespace std;int main(){int N;double xa, ya, ka;double xb, yb, kb;while (cin >> N){if (N == 0) break;cin >> xa >> ya >> xb >> yb;double L = 0;double area = 0;for (int i = 0; i < N; i++){double t;cin >> t;L += t;area += (t*t) / 2.0;}ka = ya / xa, kb = yb / xb;if (ka < kb){swap(xa, xb), swap(ya, yb), swap(ka, kb);}double x1 = (kb + 1)*L / (ka - kb);double x2 = (ka + 1)*L / (ka - kb);double y1 = ka*x1;double y2 = kb*x2;double total = (x2*y1 - x1*y2)/2;cout << fixed << setprecision(3) << (total - area) << endl;}return 0;}