1 条题解

  • 0
    @ 2025-4-9 21:17:36

    解题思路

    已知正多边形的三个顶点坐标,由于正多边形的性质,可以通过这三个点确定正多边形的所有顶点坐标。对于正n边形,其中心可以通过一定的几何方法计算得出(例如利用正多边形的对称性)。得到正多边形的所有顶点坐标后,找出这些顶点中x坐标的最大值、最小值,y坐标的最大值、最小值。最小矩形的长为x坐标最大值与最小值的差,宽为y坐标最大值与最小值的差,矩形面积为长乘宽。

    实现步骤

    读取测试用例的数量(通过判断n是否为0来确定测试用例的结束)。 对于每个测试用例:读取正多边形的顶点数量n和三个顶点的坐标((x_1, y_1)),((x_2, y_2)),((x_3, y_3))。计算正多边形的中心坐标(具体计算方法根据正多边形的几何性质,例如先计算任意两点连线的中垂线,两条中垂线的交点即为中心)。根据中心坐标和正多边形的性质,计算出正多边形的所有顶点坐标。遍历所有顶点坐标,找出x坐标的最大值(max_x)、最小值(min_x),y坐标的最大值(max_y)、最小值(min_y)。计算最小矩形的面积(area = (max_x - min_x) * (max_y - min_y))。按照格式输出结果。

    代码

    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    int INF = 0x3f3f3f3f;
    double pi = acos(-1);
    struct Point{
        double x,y;
    }a,b,c;
    Point cal_cirle(Point a,Point b,Point c)
    {
        Point ret;
        ret.x = ((b.y-c.y) * (pow(a.x,2)-pow(b.x,2)+pow(a.y,2)-pow(b.y,2)) - (a.y-b.y) * (pow(b.x,2)-pow(c.x,2)+pow(b.y,2)-pow(c.y,2))) / ((a.x-b.x)*(b.y-c.y)-(b.x-c.x)*(a.y-b.y)) / 2;
        ret.y = -(a.x-b.x) / (a.y-b.y) * (ret.x - (a.x+b.x)/2) + (a.y+b.y) / 2;
        return ret;
    }
    double solve(Point a,Point p,int n)
    {
        double r = 2 * pi / n;
        double mxx = a.x,mnx = a.x,mxy = a.y,mny = a.y;
        for( int i = 0; i < n; i++ ){
            double tmpx = (a.x - p.x) * cos(i*r) - (a.y - p.y) * sin(i*r) + p.x;
            double tmpy = (a.x - p.x) * sin(i*r) - (a.y - p.y) * cos(i*r) + p.y;
            mxx = max(mxx,tmpx);
            mnx = min(mnx,tmpx);
            mxy = max(mxy,tmpy);
            mny = min(mny,tmpy);
        }
        return (mxx - mnx) * (mxy - mny);
    }
    int main()
    {
        int n,cas = 1;
        while(~scanf("%d",&n),n){
            scanf("%lf%lf%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y);
            Point p = cal_cirle(a,b,c);
            printf("Polygon %d: %.3f\n",cas++,solve(a,p,n));
        }
        return 0;
    }
    
    • 1

    信息

    ID
    1505
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    3
    已通过
    1
    上传者