题目:
测试样例:
思路:因为最外层必然为蓝色,所以可以先从最外层进行涂色;所以可以将给的半径数据定义为一个数组,进行从大到小的sort的排序,然后下标从0开始,不能整除2的为蓝色,能整除的为黄色;分别算平方和;然后用蓝色减黄色就行了。这里要考虑精度问题,我用float好几次都没过,最后用的double过的;
#include
#include
const int N=100010;
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int n;
int a[N];
double t1=0,t2=0;
double sum=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n,cmp);
for(int i=0;i<n;i++)
{
if(i%2!=0)
{
t1=t1+a[i]*a[i]*3.1415926535897932384626433;
}
else
{
t2=t2+a[i]*a[i]*3.1415926535897932384626433;
}
}
sum=t2-t1;
printf("%.6f",sum);
return 0;
}