首页 > 其他 > 详细

【HNOI】 期望面积

时间:2014-04-07 22:48:11      阅读:948      评论:0      收藏:0      [点我收藏+]

  【题目描述】给定n个点,求这n个点组成凸包的期望面积。保证任意三点不共线。

  【数据范围】n<=100.

  首先我们知道凸包面积的计算为所有在凸包上相邻的点的叉积和,那么我们可以枚举两个点,然后求出这两个点在凸包上相邻的概率,然后再乘这两个向量的叉积,两点在凸包上的概率我们可以枚举所有的点,判断是否在枚举的向量的右面,在右面的话这些点就不能出现,最后除以二就行了。

  反思:因为用的double存的,所以如果最后直接输出答案的话,0.000000会算成-0.000000,所以要加一个精度= =。

bubuko.com,布布扣
//By BLADEVIL
#include <cstdio>
#define maxn 110

using namespace std;

int n;
int x[maxn],y[maxn];
double p[maxn];

bool judge(int i,int j,int k) {
    return ((x[j]-x[i])*(y[k]-y[i])-(y[j]-y[i])*(x[k]-x[i]))<0;
}

int main() {
    freopen("qs.in","r",stdin); freopen("qs.out","w",stdout);
    scanf("%d",&n);
    double ans=0;
    for (int i=1;i<=n;i++) scanf("%d%d%lf",&x[i],&y[i],&p[i]);
    for (int i=1;i<=n;i++)
        for (int j=1;j<=n;j++)
            if (i!=j) {
                double q=p[i]*p[j];
                for (int k=1;k<=n;k++)
                    if ((k!=i)&&(k!=j)&&(judge(i,j,k)))
                        q*=1-p[k];
                ans+=q*(x[i]*y[j]-y[i]*x[j]);
            }
    ans/=2;
    printf("%.6f",ans+1e-8);
    fclose(stdin); fclose(stdout);
    return 0;
}
bubuko.com,布布扣

 

【HNOI】 期望面积,布布扣,bubuko.com

【HNOI】 期望面积

原文:http://www.cnblogs.com/BLADEVIL/p/3650018.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!