【金凌模拟试题】:计算面积 Time Limit:1000MS Memory Limit:65536KTotal Submit:9 Accepted:1 Description jyy在平面上放置了N个地雷,假设每个地雷爆炸以后,都会将以它为圆心,半径为1的圆内所有敌人摧毁。问这N个地雷的火力所覆盖的面积是多少? Input 第一行整数N(N<=100),以后N行,每行两个整数(x, y)为每个地雷的坐标。 Output 一行,为火力覆盖的面积,精确到小数点后两位。 Sample Input 3 1 1 1 2 2 2 Sample Output 6.84 Source Added by Fxdmhtt 还是多亏荷妈帮我算积分!不然我是算不出来那个面积! 不知道测试数据的覆盖范围有多广,b1是一个小方形的面积,b2是指两个四分之一圆相交后的面积!b4四分之一圆的面积!! 相应的a 表示个数 #include<stdio.h>int f[3000][3000];int main(){// freopen("area9.in","r",stdin); //设置输入和输出文件// freopen("output.txt","w",stdout); int a4,a2,a1,mina,minb,maxa,maxb; int ii,jj; double b4=0.7853981633974,b2=0.9566114774906,b1=1; int n,i,j,a,b; double res;// while(scanf("%d",&n)!=EOF) { // if(n==0) break; scanf("%d",&n); mina=minb=50000; maxa=maxb=0; for(i=0;i<3000;i++) for(j=0;j<3000;j++) f[i][j]=0; while(n--) { scanf("%d %d",&a,&b); f[a+1500][b+1500]=1; if(a<mina) mina=a; if(b<minb) minb=b; if(a>maxa) maxa=a; if(b>maxb) maxb=b; } maxa++; maxb++; mina--; minb--; a1=a2=a4=0; for(ii=mina;ii<maxa;ii++) for(jj=minb;jj<maxb;jj++) { i=ii+1500; j=jj+1500; int t=0; if(f[i][j]) t++; if(f[i+1][j]) t++; if(f[i][j+1]) t++; if(f[i+1][j+1]) t++; if(f[i][j]&&f[i+1][j+1]) a1++; else if(f[i+1][j]&&f[i][j+1]) a1++; else if(t==2) a2++; else if(t==1) a4++; } res=a1*b1+a2*b2+a4*b4; printf("%.2lf\n",res); } return 0;}

评论