直观感觉对角线重合的时候面积最大
然后可以根据方程和割补算出阴影部分的面积
注意知道两点坐标,可以求出与原点形成的三角形的面积
用叉乘,叉乘的几何意义以这两个向量为边的平行四边形的面积
所以用叉乘除以2就可以
(x1, y1), (x2, y2),叉乘为x1y2-y1x2
#include#include #include #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;}