70,034
社区成员
发帖
与我相关
我的任务
分享#include <stdio.h>
#include <stdlib.h>
typedef struct{
int x;
int y;
int r;
int n;
}circle;
int isIn(circle *c, int i, int j)
{//判j圆要是在i圆中,则返回1
if(c[i].x+c[i].r>=c[j].x+c[j].r && c[i].x-c[i].r<=c[j].x-c[j].r &&
c[i].y+c[i].r>=c[j].y+c[j].r && c[i].y-c[i].r<=c[j].x+c[j].r)
return 1;
else
return 0;
}
int main()
{
int n, i, j, sum=0;
circle *c;
freopen("circles.in", "r", stdin);
freopen("circles.out", "w", stdout);
scanf("%d", &n);
c=(circle *)malloc(n*sizeof(circle));
for(i=0; i<n; i++)
{
scanf("%d%d%d", &c[i].x, &c[i].y, &c[i].r);
c[i].n=0;
for(j=0; j<i; j++)
{
if(isIn(c, i, j)==1)//第j个圆在第i个圆里
c[j].n++;
else if(isIn(c, j, i)==1)//第i个圆在第j个圆里
c[i].n++;
}
}
for(i=0; i<n; i++)
{
if(c[i].n%2==0) sum+=c[i].r*c[i].r;
else sum-=c[i].r*c[i].r;
}
printf("%f\n", sum*3.141592653589793);
}