开场舞蹈 #普及组#

作者: 腐啊 | 来源:发表于2019-10-05 18:38 被阅读0次

    题目

    Problem Description

    在全世界人民的期盼下,2008年北京奥林匹克运动会终于隆重召开了!

    为了展示中华民族博大精深的优秀传统文化,负责开幕式开场舞蹈的编排人员一丝不苟,每一个细节都力争完美。关于队伍是采用“天圆”阵还是“地方”阵的问题,大家讨论了七天七夜,仍没有结果。于是,他们希望借助计算机,计算两种阵型的成本。

    队伍将排列在一个二维平面内,且必须以(0,0)点为中心使得队伍保持对称美。“天圆”阵是一个圆形,而“地方”阵则是一个边平行于坐标轴的正方形。由于某种因素,阵型要求覆盖某些点(可以在边上)。

    你的任务是,计算出能够覆盖这些点的两种阵型的最小面积。

    Input

    第一行是一个整数n(1<=n<=100000),表示需要覆盖的点的个数。接下来n行,第i行是两个整数xi,yi(-1000<=xi,yi<=1000),表示第i个点的坐标位置(xi,yi)。

    Output

    第一行是一个整数s1,表示能够覆盖这些点的“天圆”阵的最小面积(pi=3.14,四舍五入)。第二行是一个整数s2,表示能够覆盖这些点的“地方”阵的最小面积。

    Sample Input

    4

    0 0

    0 2

    5 0

    8 0

    Sample Output

    201

    256


    思路

    我靠,乍一看弄得我以为要搞图论,其实十分简单.

    首先明确一下步骤

    1.输入

    2.循环求两个阵的面积

    3.输出

    好,具体实施请看下面↓

    1.输入

    输入代码不要我说,你们都懂吧~

    scanf("%d", &n);
    for(int i = 1; i <= n; i++)
        scanf("%d%d", &x[i], &y[i]);
    

    2.循环求两个阵的面积

    其实也很easy啦

    求方阵边长,就将每个给的坐标里,不管横纵,取最大值再*2.

    再求面积.

    注意,因为坐标正负与面积无关系,所以先自身取绝对值.

    求圆阵也简单,利用勾股定理,求出半径.

    for(int i = 1; i <= n; i++)
    {
        x[i] = abs(x[i]);   
        y[i] = abs(y[i]);//绝对值
        /*-------------------------------*/
        jzbc = max(x[i] * 2, max(y[i] * 2, jzbc));//判断最大的边长
        jzmj = jzbc * jzbc;//求面积
        /*-------------------------------*/
        ybj = max(ybj, sqrt(x[i] * x[i] + y[i] * y[i]));//求最大半径
        ymj = pi * ybj * ybj;//面积
    }
    

    好了,细节不在强调.

    贴完整代码.

    #include <cstdio>
    #include <cmath>
    #include <iostream>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    int n;
    int x[100001], y[100001];
    const double pi = 3.14; 
    int jzbc, jzmj;
    double ybj, ymj;
    int main()
    {
        scanf("%d", &n);
        for(int i = 1; i <= n; i++)
            scanf("%d%d", &x[i], &y[i]);
        for(int i = 1; i <= n; i++)
        {
            x[i] = abs(x[i]);
            y[i] = abs(y[i]);
            /*-------------------------------*/
            jzbc = max(x[i] * 2, max(y[i] * 2, jzbc));
            jzmj = jzbc * jzbc;
            /*-------------------------------*/
            ybj = max(ybj, sqrt(x[i] * x[i] + y[i] * y[i]));
            ymj = pi * ybj * ybj;
        }
        printf("%.0lf\n%d",ymj , jzmj);
    }
    

    相关文章

      网友评论

        本文标题:开场舞蹈 #普及组#

        本文链接:https://www.haomeiwen.com/subject/trkypctx.html