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

    链接

    背景

    (orangebird)(Luogu) (P3802)

    题意

    给定 (7) 种技能的数量 (a_i(i in [1,7])) ,规定连续使用 (7) 种不同技能后会构成一个必杀,所有必杀互不冲突(即某个位置的某个技能可以在多个不同的必杀技中)。求使用完所有技能后构成必杀的期望次数。

    解法

    本来是要作为练习题的,观察了很久也没有什么好的做法。无奈看了题解。显然前 (6) 次使用技能都是无法构成必杀技的。一个重要结论是从第 (7) 次使用技能开始,所有位置构成必杀的概率相等。
    一个并不那么简要的证明:
    先设 (sum_limits{i in [1,7]} a_i=n)
    不妨先算出第 (7) 次使用技能时构成必杀的概率 (P_7) 。先随机一种出技能的序列,就假设为 $ {1,2,3,4,5,6,7 }$ ,那么此时的概率为 $ frac{a_1}{n} imes frac{a_2}{n-1} imes frac{a_3}{n-2} imes frac{a_4}{n-3} imes frac{a_5}{n-4} imes frac{a_6}{n-5} imes frac{a_7}{n-6} $ 。那么换一种排列的概率呢?假设为 $ {2,1,4,7,6,3,5 }$ ,那么此时的概率为 $ frac{a_2}{n} imes frac{a_1}{n-1} imes frac{a_4}{n-2} imes frac{a_7}{n-3} imes frac{a_6}{n-4} imes frac{a_3}{n-5} imes frac{a_5}{n-6} $ 。将式子通分后不难发现两种排列的概率是相等的。因此我们根本不关心排列的顺序,所有的概率都是 $ frac{prod_limits{i in [1,7]}a_i}{prod_limits{i in [0,6]}(n-i)} $ 。
    因此, $P_7=7! imes frac{prod_limits{i in [1,7]}a_i}{prod_limits{i in [0,6]}(n-i)} $ 。
    那么,接下来就考虑 (P_8) 为多少。由于所有必杀互不冲突,则第 (8) 次使用技能时能构成必杀一定是由第 (2) 次使用技能开始的一个 (7) 阶技能排列构成的。那么,首位的元素就可以随机选择。
    当首位为 (1) 技能时,构成必杀的概率为 $ frac{a_1}{n} imes 7! imes frac{a_1-1}{n-1} imes frac{a_2}{n-2} imes frac{a_3}{n-3} imes frac{a_4}{n-4} imes frac{a_5}{n-5} imes frac{a_6}{n-6} imes frac{a_7}{n-7} $ ,同理,当首位为 (i(i in [1,7])) 技能时,构成必杀的概率为 $ frac{a_i}{n} imes 7! imes frac{a_1-[i1]}{n-1} imes frac{a_2-[i2]}{n-2} imes frac{a_3-[i3]}{n-3} imes frac{a_4-[i4]}{n-4} imes frac{a_5-[i5]}{n-5} imes frac{a_6-[i6]}{n-6} imes frac{a_7-[i==7]}{n-7} $ ,因此 (P_8=sum_limits{i in [1,7]} { frac{a_i}{n} imes 7! imes frac{a_1-[i==1]}{n-1} imes frac{a_2-[i==2]}{n-2} imes frac{a_3-[i==3]}{n-3} imes frac{a_4-[i==4]}{n-4} imes frac{a_5-[i==5]}{n-5} imes frac{a_6-[i==6]}{n-6} imes frac{a_7-[i==7]}{n-7} }=frac{7! imes prod_limits{i in [1,7]}a_i imes (sum_limits{i in [1,7]} a_i-7)}{prod_limits{i in [0,7]} (n-i)}=frac{7! imes prod_limits{i in [1,7]}a_i}{prod_limits{i in [0,6]} (n-i)}=P_7) ,使用第 (i(i in [7,n])) 次技能时同理,命题得证。
    由于每个“第 (i(i in [7,n])) 次使用技能时构成必杀”这样的随机事件都仅能发生一次,因此答案就是 $prod_limits{i in [7,n]} P_i=(n-6) imes 7! imes frac{prod_limits{i in [1,7]}a_i}{prod_limits{i in [0,6]}(n-i)} $ , (O(7)) 计算即可。

    细节

    请注意前 (6) 次使用技能都是无法构成必杀技的。若 (n<7) ,则答案显然为 (0.000) 而非 (-0.000)

    代码

    $View$ $Code$
    
    //省略头文件
    using namespace std;
    inline int read()
    {
    	int ret=0,f=1;
    	char ch=getchar();
    	while(ch>'9'||ch<'0')
    	{
    		if(ch=='-')
    			f=-1;
    		ch=getchar();
    	}
    	while(ch>='0'&&ch<='9')
    	{
    		ret=(ret<<1)+(ret<<3)+ch-'0';
    		ch=getchar();
    	}
    	return ret*f;
    }
    int a[8],n;
    double ans=5040.0;
    int main()
    {
    	for(register int i=1;i<=7;i++)
    	{
    		a[i]=read();
    		n+=a[i];
    	}
    	if(n<7)
    	{
    		printf("0.000
    ");
    		return 0;
    	}
    	for(register int i=1;i<=7;i++)
    		ans=ans*a[i]/(n-i+1);
    	ans*=(n-6);
    	printf("%0.3lf
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    每天一个linux命令(40):wc命令
    每天一个linux命令(39):grep 命令
    每天一个linux命令(38):cal 命令
    每天一个linux命令(37):date命令
    每天一个linux命令(36):diff 命令
    每天一个linux命令(35):ln 命令
    [android] Activity 的生命周期 以及横屏竖屏切换时 Activity 的状态变化
    Android onConfigurationChanged 不执行
    faster-rcnn anchor 介绍
    Faster-rcnn centos tensorflow
  • 原文地址:https://www.cnblogs.com/Peter0701/p/11745265.html
Copyright © 2011-2022 走看看