您的位置:首页 > 其它

URAL 1333

2016-08-06 15:29 204 查看
这题真是无语了。

想法的确挺好的,因为1%的精度可以了,同时,N<=10,可以视为1000*1000

但是这个吃精度的事情真是无语

1.一开始我打算把所有的数据都乘以1000,结果数据出现了惊人的误差

2。同时,如果我用dcmp函数将double 类型变成int类型比较大小的时候,出现了蜜汁bug。

看来像这种只是经过了+-*的double 野生类型,直接用就可以了。。。

amazing#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
using namespace std;
const double eps=1e-10;
int dcmp(double x)
{
if(x>eps)return 1;
if(x<-eps)return -1;
return 0;
}
struct Circle
{
double x,y,r;
Circle(){}
Circle(double x0,double y0,double r0):x(x0),y(y0),r(r0){}
bool inc(double X,double Y)
{
double ans=(X-x)*(X-x)+(Y-y)*(Y-y);
return ans<=r*r;
}
}c[13];

int n,cnt;

int main()
{
while(~scanf("%d",&n)){
cnt=0;
for(int i=0;i<n;i++){
double x,y,r;
scanf("%lf%lf%lf",&x,&y,&r);
c[i]=Circle(x,y,r);
}
for(double i=0;i<=1;i+=0.001){
for(double j=0;j<=1;j+=0.001){
for(int k=0;k<n;k++){
if(c[k].inc(i,j)){
cnt++;break;
}
}
}
}
printf("%lf\n",(double)cnt/10000);
}
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM URAL 计算几何