题目描述
在一个平面上给定 n 个同心圆。
如下图所示:
这些同心圆构成的图形是蓝黄相间的,其中最外面的圆是蓝色。
请问,这 n 个同心圆构成的图形中,蓝色部分的总面积是多少?
输入格式
第一行包含整数 n。
第二行包含 n 个整数,r1,r2,…,rn,表示各个圆的半径。
输出格式
输出蓝色部分的总面积。
结果保留六位小数。
数据范围
1≤n≤100,
1≤ri≤1000,
所有圆的半径两两不同。
输入样例
1
1
输出样例
3.141593
输入样例
3
1 4 2
输出样例
40.840704
算法1
(暴力枚举) $O(n*logn)$
有时候可以通过-=2来替代本来i- -的处理方式
时间复杂度
参考文献
C++ 代码
#include <bits/stdc++.h>
using namespace std;
const int N = 110;
const double PI = acos(-1);
int a[N],n;
int main()
{
cin >> n;
for(int i = 0; i < n; i ++)
{
int t;
cin >> t;
a[i] = t * t;
}
sort(a, a + n);
double sum = 0;
for(int i = n - 1; i >= 0; i -= 2)
{
sum += a[i] - a[i - 1];
}
printf("%lf",sum * PI);
return 0;
}