zoukankan      html  css  js  c++  java
  • 小魔女帕琪

    洛咕

    题意:给定7个元素各自的数量,每次释放一个元素,一旦连续释放了7个不同的元素,则会释放出七重奏,求释放七重奏的期望次数.

    分析:首先提醒一下如果释放元素顺序为1 2 3 4 5 6 7 1,则会有两次七重奏.

    (n=sum_{i=1}^7a[i]).对于每个位置(i),从(i)开始的7个位置中,7个元素都不相同的概率为(7!*frac{a[1]}{n}*frac{a[2]}{n-1}*frac{a[3]}{n-2}*frac{a[4]}{n-3}*frac{a[5]}{n-4}*frac{a[6]}{n-5}*frac{a[7]}{n-6}).因为一共有(n-6)个这样的位置(i)(即n个数的序列,从前往后,可以划分出n-6段长度为7的段,(1-7),(2-8),...,((n-6)-n)),所以还要除以(n-6.)

    最终答案就是(7!*frac{a[1]}{n}*frac{a[2]}{n-1}*frac{a[3]}{n-2}*frac{a[4]}{n-3}*frac{a[5]}{n-4}*frac{a[6]}{n-5}*a[7].)

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #include<queue>
    #include<map>
    #include<set>
    #define ll long long
    using namespace std;
    inline int read(){
        int x=0,o=1;char ch=getchar();
        while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
        if(ch=='-')o=-1,ch=getchar();
        while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
        return x*o;
    }
    int n,a[10];
    int main(){
    	for(int i=1;i<=7;++i){
    		a[i]=read();
    		n+=a[i];
    	}
        if(n<=6){puts("0.000");return 0;}//好像没有特判数据
    	double ans=1.000;
    	for(int i=1;i<=6;++i){
    		ans=1.0*ans*a[i]/(n+1-i);
    	}
    	ans=ans*1.0*2.0*3.0*4.0*5.0*6.0*7.0*a[7];
    	printf("%.3lf
    ",ans);
        return 0;
    }
    
    
  • 相关阅读:
    CodeForces
    HDU
    HDU
    POJ
    URAL
    POJ
    UVa
    UVa
    UVa
    UVa
  • 原文地址:https://www.cnblogs.com/PPXppx/p/11552347.html
Copyright © 2011-2022 走看看