高等数学
定积分
求出第一象限交集面积的四倍
交集面积等于两部分面积相加
每一部分分别对应一个椭圆函数
积分限分别问0-x0,x0-c
最后面积相加减去交集

包含情况特殊处理
图片说明
本题精确度要求不高,数学方法便可轻松解决,打着算法题的幌子本质是一道高数题,时间复杂度O(1)

https://blog.csdn.net/qq_44378358/article/details/117410681?spm=1001.2014.3001.5501

#include <iostream>
#include <cstdio>
#include <cmath>

using namespace std;

const double PI = 3.1415926535;
/*
3
2 1 1 2
3 2 1 2
3 2 1 4
*/
int main(void)  {
    int t;
    cin >> t;
    while (t--) {
        double a, b, c, d, ans = 0;
        cin >> a >> b >> c >> d;
        if (a > c && b > d) {
            ans = PI * a * b;
        } else if (c > a && d > b) {
            ans = PI * c * d;
        } else {
            double x0 = sqrt((a*a * c*c * (b*b - d*d))/(b*b * c*c - a*a * d*d));
            double s1 = 0.5 * a * b * (x0 / a) * sqrt(1 - x0*x0 / (a*a)) + 0.5 * a * b * (asin(x0 / a));
            double s2 = PI * c * d / 4 -  0.5 * c * d *  x0 / c * sqrt(1 - x0 * x0 / (c * c)) - 0.5 * c * d * asin(x0 / c);
            ans = PI * a * b + PI * c * d - 4 * (s1 + s2);
        }
        printf("%.1f\n", ans);
    }
}