timus 1333. Genie Bomber 2 URAL 结题报告 多圆覆盖率问题

timus  1333. Genie Bomber 2 URAL 结题报告   多圆覆盖率问题

题目大意,求轰炸机轰炸率问题,因为轰炸机的炸弹轰炸面积是圆形,而测试地区的形状是正方形,给多个炸弹和轰炸半径,其被轰炸的面积占测试面积的百分比;
而且精确到1%或者更好一也可以……   初一看这个题,也忒难了吧,多个圆,还有可能多圆并…… 娘的,难度才200+啊,计算几何也忒难了吧,搜解题报告,看到精度不是太卡,把正方形的面积离散化就可以了,离散化成矩阵网格或者是点阵都可以,随你怎么离散化,然后判断点是不是在圆内…… 题目就这么轻轻松松的  A了,貌似我连测试数据都没过啊





#include <iostream>
#include<cmath>
#include<algorithm>
#include<cstdio>
using namespace std;

const double INF = 1e20;
const double EPS=1e-6;


bool dd(double x,double y) {   return fabs( x - y ) < EPS;}  // x == y
bool xyd(double x,double y) {   return  x<y+EPS;}  // x <= y


struct Node
{
    double x,y;
    double r;
    int id;
};
double getk(double x1,double y1,double x2,double y2)
{
    if(dd(x1,x2))return INF;
    else return (y2-y1)/(x2-x1);
}
double dis2(Node n1,Node n2)
{
    return  sqrt( pow(n1.x-n2.x, 2.0 )+pow(n1.y-n2.y, 2.0 ) );
}



int main()
{///方法er,优化法,因为O(N^3)要有好多次重复的计算,好多次比较斜率的时候实际上是把两点的斜率重新计算了下,
    ///所以先把i,j的斜率算出来,在做处理
	int   n, num;
	cin>>n;
	Node nod[20];
	for (int i=0; i<n; i++)
		cin>>nod[i].x>>nod[i].y>>nod[i].r;
    int ans=0;
	for (double i=0; i<1; i+=0.001)
	{///精度太差了吧,连样例都没过啊
	    for(double j=0;j<1;j+=0.001)
        {
            Node tmp;tmp.x=i;tmp.y=j;
            for(int t=0;t<n;++t)
            {
                if( xyd(dis2(tmp,nod[t]),nod[t].r) ){ans++; break;}
            }
        }

	}
	double tmp=(ans*100)/(1000.0*1000.0);
	printf("%.5f\n",tmp+EPS);
}


雄心铁胆打天下,拼搏生命笑对天。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值