題目
Problem Description
在全世界人民的期盼下,2008年北京奧林匹克運動會終于隆重召開了!
為了展示中華民族博大精深的優(yōu)秀傳統(tǒng)文化,負(fù)責(zé)開幕式開場舞蹈的編排人員一絲不茍,每一個細(xì)節(jié)都力爭完美。關(guān)于隊伍是采用“天圓”陣還是“地方”陣的問題,大家討論了七天七夜,仍沒有結(jié)果。于是,他們希望借助計算機,計算兩種陣型的成本。
隊伍將排列在一個二維平面內(nèi),且必須以(0,0)點為中心使得隊伍保持對稱美?!疤靾A”陣是一個圓形,而“地方”陣則是一個邊平行于坐標(biāo)軸的正方形。由于某種因素,陣型要求覆蓋某些點(可以在邊上)。
你的任務(wù)是,計算出能夠覆蓋這些點的兩種陣型的最小面積。
Input
第一行是一個整數(shù)n(1<=n<=100000),表示需要覆蓋的點的個數(shù)。接下來n行,第i行是兩個整數(shù)xi,yi(-1000<=xi,yi<=1000),表示第i個點的坐標(biāo)位置(xi,yi)。
Output
第一行是一個整數(shù)s1,表示能夠覆蓋這些點的“天圓”陣的最小面積(pi=3.14,四舍五入)。第二行是一個整數(shù)s2,表示能夠覆蓋這些點的“地方”陣的最小面積。
Sample Input
4
0 0
0 2
5 0
8 0
Sample Output
201
256
思路
我靠,乍一看弄得我以為要搞圖論,其實十分簡單.
首先明確一下步驟
1.輸入
2.循環(huán)求兩個陣的面積
3.輸出
好,具體實施請看下面↓
1.輸入
輸入代碼不要我說,你們都懂吧~
scanf("%d", &n);
for(int i = 1; i <= n; i++)
scanf("%d%d", &x[i], &y[i]);
2.循環(huán)求兩個陣的面積
其實也很easy啦
求方陣邊長,就將每個給的坐標(biāo)里,不管橫縱,取最大值再*2.
再求面積.
注意,因為坐標(biāo)正負(fù)與面積無關(guān)系,所以先自身取絕對值.
求圓陣也簡單,利用勾股定理,求出半徑.
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;//面積
}
好了,細(xì)節(jié)不在強調(diào).
貼完整代碼.
#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);
}