几何题
题意:给出n个圆的圆心坐标和半径,给出一个单位方格,在(0,0),(0,1),问这些圆覆盖的面积占方格的百分比,圆超出方格的部分不计算。另外算百分比,答案精确到1%即可,即整数部分正确即可,小数部分不要求
这题,可以想按照题意直接下手,未免太难了,另外注意到答案的输出,其实对精度的要求很低(对小数都没要求)。我们可以用一直近似的算法来解决
将方格分割为一个一个的小格子,当分割得很小的时候,格子可以看做是一个点,然后看这个点在不在圆上或圆内,在的话相当于圆覆盖了这个点,覆盖了这个格子。所以我们将1*1方格分割为1000*1000的格子,然后逐一去判断,很暴力的方法,但就是这样过了
#include#include #include #include using namespace std;const double PI = acos(-1.0);const double E = 1e-8;const int N = 15;const int M = 1000;const double B = 0.001;struct crc{ double x,y,r;}a[N];int n;double dis(double x ,double y , struct crc p){ return sqrt( (x-p.x)*(x-p.x) + (y-p.y)*(y-p.y));}int judge(double x , double y){ for(int i=0; i