zoukankan      html  css  js  c++  java
  • A

    题目链接:

    A - Piece of Cake

     Kattis - pieceofcake 

    题目大意:给你一个多边形,然后给你这个多边形的每个点的坐标,让你从这个n个点中选出k个点,问这个k个点形成的面积的期望。

    具体思路:我们肯定不能硬跑每一个k边形,肯定会超时。我们以每个点作为起点,从这个点开始,形成的面积的期望是多少,然后遍历每一个点,这样算出来的会有重复,最后除以2就可以了。

    然后算面积的时候,我们分开算。一个多边形的面积等于每个点按照顺时针或者是逆时针两个点之间的叉积。

    求组合数的时候,用递推的方法。

    AC代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 # define ll long long
     4 # define inf 0x3f3f3f3f
     5 const int maxn = 2e5+100;
     6 struct node{
     7 long  double  x,y;
     8 }q[maxn];
     9 long double  cal(int t1,int t2){
    10 return (q[t1].x*q[t2].y-q[t1].y*q[t2].x);
    11 }
    12 long double c[3000][3000];
    13 int main(){
    14 int n,k;
    15 scanf("%d %d",&n,&k);
    16 for(int i=0;i<n;i++){
    17 cin>>q[i].x>>q[i].y;
    18 }
    19 for(int i=0;i<=n;i++){
    20 c[0][i]=0;
    21 c[i][0]=1;
    22 }
    23 for(int i=1;i<=n;i++){
    24 for(int j=1;j<=i;j++){
    25 c[i][j]=c[i-1][j]+c[i-1][j-1];
    26 }
    27 }
    28 long double  ans=0;
    29 for(int i=0;i<n;i++){
    30 for(int j=k-1;j<n;j++){
    31 int  to=(i+j)%n;
    32 ans+=cal(i,to)*c[j-1][k-2]/c[n][k];
    33 //cout<<cal(i,to)<<" "<<c[j-1][k-1]<<" "<<c[n][k]<<endl;
    34 }
    35 }
    36 //cout<<ans<<endl;
    37 ans/=2.0;
    38 cout<<fixed<<setprecision(6)<<ans<<endl;
    39 }
  • 相关阅读:
    设计与声明
    字符串匹配算法——KMP、BM、Sunday
    红黑树——原理
    Linux命令——监视相关
    资源管理
    排序算法——QuickSort、MergeSort、HeapSort(C++实现)
    智能指针——使用与实现
    进程间通信——实现
    构造/析构/赋值运算
    物理内存管理
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10676011.html
Copyright © 2011-2022 走看看