zoukankan      html  css  js  c++  java
  • Bzoj2720--violet5列队春游

    题意 :

    题解 :

    n^3的做法很好想,直接枚举小朋友,长度和位置暴力计算就可以了

    然后我们可以发现计算位置不同长度相同的答案时有很多相同的计算

    所以我们可以不去枚举位置,而对每个长度,所有位置在这个长度之前的概率均为0,因为即使前面全比他小长度也到不了我们当前的长度,而之后的位置概率都是相同的,这样就可以去掉位置了

    设s为比我们枚举到的小朋友矮的人数,对于每个长度L的概率为s/(n-1)*(s-1)/(n-2)...*(s-L+1)/(n-L)

    上述复杂度为n^2

    网上看到有线性做法,没看懂,看懂再来更新

    Upd :  线性做法如下

    考虑每个人的视野范围的期望=$sum (i * p(i))$ = $sum (p(ge i))$

    然后排列推一推

    具体可以参考http://www.cnblogs.com/yousiki/p/6399976.html

    代码(n^2) :

    #include<bits/stdc++.h>
    using namespace std;
    
    #define MAXN 305
    
    int n,h[MAXN],ap[1005];
    double ans;
    
    int main() {
        scanf("%d",&n);
        for(int i=1;i<=n;i++) scanf("%d",&h[i]);
        sort(h+1,h+1+n);
        for(int i=1;i<=n;i++) if(!ap[h[i]]) ap[h[i]]=i;
        for(int i=1;i<=n;i++) {
            double p=1;
            for(int j=1;j<=n;j++) {
                ans+=p*(n-j+1)/n;
                if(j==n) break;
                p=p/(n-j)*(ap[h[i]]-j);
            }
        }
        printf("%.2lf
    ",double(ans));
        return 0;
    }
    View Code
  • 相关阅读:
    替换URL传递的参数
    执行SQl语句得到xml结果集
    table中文本太长换行
    org.xml.sax.SAXNotRecognizedException
    WAMP+CMSeasy快速搭建学校网站
    推荐几个web前台开发的小工具
    来园子里注册啦
    C++ Virtual的背后
    Games101观后补充笔记
    Lua语法入门
  • 原文地址:https://www.cnblogs.com/ihopenot/p/6221786.html
Copyright © 2011-2022 走看看