zoukankan      html  css  js  c++  java
  • 【HNOI】 期望面积

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

      【数据范围】n<=100.

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

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

    //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;
    }
  • 相关阅读:
    windows p12(pfx)个人证书安装过程
    OpenSSL库验证PKCS7签名
    Crypto库实现PKCS7签名与签名验证
    windows 系统中打开一个数字证书所经历的过程
    DBA不可不知的操作系统内核参数
    MySQL大表优化方案
    深入浅出Cache
    Git Stash用法
    Git服务器搭建全过程分步详解
    laravel 5.1 性能优化对比
  • 原文地址:https://www.cnblogs.com/BLADEVIL/p/3650018.html
Copyright © 2011-2022 走看看