题目描述
在一个平面上给定 n 个同心圆。
这些同心圆构成的图形是蓝黄相间的,其中最外面的圆是蓝色。
请问,这 n 个同心圆构成的图形中,蓝色部分的总面积是多少?
输入格式
第一行包含整数 n。
第二行包含 n 个整数,r1,r2,…,rn,表示各个圆的半径。
输出格式
输出蓝色部分的总面积。
结果保留六位小数。
数据范围
1≤n≤100,
1≤ri≤1000,
所有圆的半径两两不同。
样例
输入样例1:
1
1
输出样例1:
3.141593
输入样例2:
3
1 4 2
输出样例2:
40.840704
算法1
(模拟) $O(n)$
注意:输入的半径要自己排序
π最好调库
python的math 要自己 import
时间复杂度
参考文献
python3 代码
import math
n = int(input())
rs = [int(x) for x in input().split()]
rs.sort()
ss = [0.0 for _ in range(n)]
for i in range(n):
ss[i] = math.pi * (rs[i] ** 2)
s1 = sum([ss[i] for i in range(0, n , 2)])
s2 = sum([ss[i] for i in range(1, n , 2)])
res = abs(s2 - s1)
print("%.6f"%res)
C++ 代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n; cin >> n;
vector<double> rs(n);
for (int i = 0; i < n; i ++)
cin >> rs[i];
sort(rs.begin(), rs.end());
double s1 = 0.0;
for (int i = 0; i < n; i += 2)
s1 += acos(-1) * rs[i] * rs[i];
double s2 = 0.0;
for (int i = 1; i < n; i += 2)
s2 += acos(-1) * rs[i] * rs[i];
double res = abs(s1 - s2);
printf("%.6f", res);
return 0;
}
算法2
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
blablabla