开场舞蹈 #普及组#
Posted wnfs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开场舞蹈 #普及组#相关的知识,希望对你有一定的参考价值。
题目
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.输入
输入代码不要我说,你们都懂吧~
1 scanf("%d", &n); 2 for(int i = 1; i <= n; i++) 3 scanf("%d%d", &x[i], &y[i]);
2.循环求两个阵的面积
其实也很easy啦
求方阵边长,就将每个给的坐标里,不管横纵,取最大值再*2.
再求面积.
注意,因为坐标正负与面积无关系,所以先自身取绝对值.
求圆阵也简单,利用勾股定理,求出半径.
1 for(int i = 1; i <= n; i++) 2 { 3 x[i] = abs(x[i]); 4 y[i] = abs(y[i]);//绝对值 5 /*-------------------------------*/ 6 jzbc = max(x[i] * 2, max(y[i] * 2, jzbc));//判断最大的边长 7 jzmj = jzbc * jzbc;//求面积 8 /*-------------------------------*/ 9 ybj = max(ybj, sqrt(x[i] * x[i] + y[i] * y[i]));//求最大半径 10 ymj = pi * ybj * ybj;//面积 11 }
好了,细节不在强调.
贴完整代码.
1 #include <cstdio> 2 #include <cmath> 3 #include <iostream> 4 #include <cstring> 5 #include <algorithm> 6 using namespace std; 7 int n; 8 int x[100001], y[100001]; 9 const double pi = 3.14; 10 int jzbc, jzmj; 11 double ybj, ymj; 12 int main() 13 { 14 scanf("%d", &n); 15 for(int i = 1; i <= n; i++) 16 scanf("%d%d", &x[i], &y[i]); 17 for(int i = 1; i <= n; i++) 18 { 19 x[i] = abs(x[i]); 20 y[i] = abs(y[i]); 21 /*-------------------------------*/ 22 jzbc = max(x[i] * 2, max(y[i] * 2, jzbc)); 23 jzmj = jzbc * jzbc; 24 /*-------------------------------*/ 25 ybj = max(ybj, sqrt(x[i] * x[i] + y[i] * y[i])); 26 ymj = pi * ybj * ybj; 27 } 28 printf("%.0lf %d",ymj , jzmj); 29 }
以上是关于开场舞蹈 #普及组#的主要内容,如果未能解决你的问题,请参考以下文章