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