这是我第一次只要可以这么做,题目中给的精度范围较大,所以可以把圆形的区域直接用小方块拼接近似来表示,maps地图开的越大,精度越高,但同时耗时也更多。
代码如下:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
double x,y,r;
int maps[][],num,i,j,n;
while(~scanf("%d",&n))
{
num = ;
memset(maps,,sizeof(maps));
for(int k = ;k < n;k++)
{
scanf("%lf%lf%lf",&x,&y,&r);
x=x*+;
y=y*+;
r=r*;
for(i=; i<=; i++)
for(j=; j<=; j++)
if(maps[i][j]== && (i-x)*(i-x)+(j-y)*(j-y) <= r*r)
{
maps[i][j]=;
num--;
}
}
printf("%.3f\n",1.0*num/10201.0);
}
return ;
}