首页 > 其他 > 详细

NAIPC 2019 A - Piece of Cake(凸包计算)

时间:2019-10-03 17:07:18      阅读:80      评论:0      收藏:0      [点我收藏+]

学习:https://blog.csdn.net/qq_21334057/article/details/99550805

题意:从nn个点中选择kk个点构成多边形,问期望面积。

题解:如果能够确定两个点,那么可以从这两个点之间选择k2个点来构成一个k边形。所以可以枚举两个点,计算这两个点被选入构成凸包的概率和对凸包贡献的面积。

技术分享图片
#include <bits/stdc++.h>
#define fopi freopen("in.txt", "r", stdin)
#define fopo freopen("out.txt", "w", stdout)
using namespace std;
typedef long long LL;
typedef long double ld;
const int maxn = 2500 + 10;

struct Point {
    ld x, y;
}a[maxn];

ld C[maxn][maxn];

void getC(int n) {
    C[0][0] = 1;
    for (int i = 1; i <= n; i++) {
        C[i][0] = 1;
        for (int j = 1; j <= i; j++)
            C[i][j] = C[i-1][j] + C[i-1][j-1];
    }
}

ld Cross(Point a, Point b) {
    return a.x*b.y - a.y*b.x;
}

int n, k;
int main() {
    ios::sync_with_stdio(false);

    cin >> n >> k;
    getC(n);

    for (int i = 1; i <= n; i++)
        cin >> a[i].x >> a[i].y;

    ld ans = 0;
    for (int i = 1; i <= n; i++)
    for (int j = k-1; j <= n-1; j++) {
        int t = i+j;
        if (t > n) t -= n;
        ans += Cross(a[i], a[t]) * C[j-1][k-2] / C[n][k];
    }
    
    printf("%.7Lf\n", ans/2);
}
View Code

 

NAIPC 2019 A - Piece of Cake(凸包计算)

原文:https://www.cnblogs.com/starve/p/11619952.html

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