直观感觉对角线重合的时候面积最大
然后可以根据方程和割补算出阴影部分的面积
注意知道两点坐标,可以求出与原点形成的三角形的面积
用叉乘,叉乘的几何意义以这两个向量为边的平行四边形的面积
所以用叉乘除以2就可以
(x1, y1), (x2, y2),叉乘为x1y2-y1x2
#include<cstdio>
#include<cmath>
#include<algorithm>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std;int main()
{int n;while(~scanf("%d", &n) && n){double xa, xb, ya, yb, k1, k2;scanf("%lf%lf%lf%lf", &xa, &ya, &xb, &yb);k1 = ya / xa, k2 = yb / xb;if(k1 > k2) swap(k1, k2);double L = 0, l, sum = 0;REP(i, 0, n){scanf("%lf", &l);L += l;sum += l * l / 2;}double x1 = (k1 + 1) / (k2 - k1) * L;double x2 = (k2 + 1) / (k2 - k1) * L;double y1 = k1 * x1, y2 = k2 * x2;printf("%.3lf\n", (x1 * y2 - x2 * y1) / 2 - sum);}return 0;
}