1. 程式人生 > >P3802 小魔女帕琪

P3802 小魔女帕琪

pla src onclick 輸出格式 text tro lin event 輸入輸出

P3802 小魔女帕琪

題目背景

從前有一個聰明的小魔女帕琪,興趣是狩獵吸血鬼。

帕琪能熟練使用七種屬性(金、木、水、火、土、日、月)的魔法,除了能使用這麽多種屬性魔法外,她還能將兩種以上屬性組合,從而唱出強力的魔法。比如說為了加強攻擊力而將火和木組合,為了掩蓋弱點而將火和土組合等等,變化非常豐富。

題目描述

現在帕琪與強大的夜之女王,吸血鬼蕾咪相遇了,夜之女王蕾咪具有非常強大的生命力,普通的魔法難以造成效果,只有終極魔法:帕琪七重奏才能對蕾咪造成傷害。帕琪七重奏的觸發條件是:連續釋放的7個魔法中,如果魔法的屬性各不相同,就能觸發一次帕琪七重奏。

現在帕琪有7種屬性的能量晶體,分別為a1,a2,a3,a4,a5,a6,a7(均為自然數),每次釋放魔法時,會隨機消耗一個現有的能量晶體,然後釋放一個對應屬性的魔法。

現在帕琪想知道,她釋放出帕琪七重奏的期望次數是多少,可是她並不會算,於是找到了學OI的你

輸入輸出格式

輸入格式:

一行7個數字,a1,a2,a3,a4,a5,a6,a7

輸出格式:

一個四舍五入保留3位的浮點數

輸入輸出樣例

輸入樣例#1:

1 1 1 1 1 1 1

輸出樣例#1:

1.000

說明

樣例說明:

顯然一定會觸發一次帕琪七重奏

數據範圍:

對於30%的測試點,a1+a2+a3+a4+a5+a6+a7<=10

對於100%的測試點,a1+a2+a3+a4+a5+a6+a7<=10^9

by-szc

思路分析:期望入門題。

首先引入一個公式:

數學期望公式:

\begin{equation*}E\xi=\sum_{i=0}^n x_i p_i\end{equation*}

設:

\begin{equation*}p=\sum^n_{i=1}a_i\end{equation*}

對於每一位i7魔法都不相同的概率為:

\begin{equation*}P=7!\cdot a_1\div p\cdot a_2\div{(p-1)}\cdot a_3\div{(p-2)}\cdot a_4\div{(p-3)}\cdot a_5\div{(p-4)}\cdot a_6\div{(p-5)}\cdot a_7\div{(p-6)}\end{equation*}

由於n的範圍為1-6,n-6=0,所以原式可化簡為:

\begin{equation*}P=7!\cdot a_1\div p\cdot a_2\div{(p-1)}\cdot a_3\div{(p-2)}\cdot a_4\div{(p-3)}\cdot a_5\div{(p-4)}\cdot a_6\div{(p-5)}\cdot a_7\end{equation*}

由此可寫出代碼:

技術分享
 1 #include<cstdio>
 2 using namespace std;
 3 double a1,a2,a3,a4,a5,a6,a7,n;
 4 int main()
 5 {
 6     scanf("%lf%lf%lf%lf%lf%lf%lf",&a1,&a2,&a3,&a4,&a5,&a6,&a7);
 7     n=a1+a2+a3+a4+a5+a6+a7;
 8     printf("%.3lf",5040*a1/n*a2/(n-1)*a3/(n-2)*a4/(n-3)*a5/(n-4)*a6/(n-5)*a7);
 9     return 0;
10 }
View Code

P3802 小魔女帕琪