正文

【金凌模拟试题】:计算面积2008-10-16 12:50:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/1mi2/38932.html

分享到:

【金凌模拟试题】:计算面积 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;}        

阅读(1922) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册