题意:给你一个n凸多边形顶点的坐标,从其中任选k个点组成k多边形,问k多边形面积的期望;
分析:可以提前用long double预处理出组合数,方便后面计算,多边形面积时顺时针或逆时针相邻顶点叉积和;
#include<bits/stdc++.h>
using namespace std;
const int maxn=2507;
long double a[maxn][maxn];
struct node{long double x,y;} p[maxn];
long double mul(int i,int j){return p[i].x*p[j].y-p[j].x*p[i].y;}
int main()
{
int n,k;scanf("%d%d",&n,&k);
long double ans=0.0;
for (int i=0;i<n;i++) scanf("%Lf%Lf",&p[i].x,&p[i].y);
for (int i=0;i<=n;i++) a[0][i]=0,a[i][0]=1;
for (int i=1;i<=n;i++) for (int j=1;j<=i;j++) a[i][j]=a[i-1][j]+a[i-1][j-1];
for (int i=0;i<n;i++) for (int j=k-1;j<n;j++) ans+=mul(i,(i+j)%n)*a[j-1][k-2]/a[n][k];
ans/=2.0;
printf("%.8Lf\n",ans);
return 0;
}