description
有m個球,一開始每個球均有乙個初始標號,標號範圍為1~n且為整數,標號為i的球有ai個,並保證σai = m。
每次操作等概率取出乙個球(即取出每個球的概率均為1/m),若這個球標號為k(k < n),則將它重新標號為k + 1;若這個球標號為n,則將其重標號為1。(取出球后並不將其丟棄)
現在你需要求出,經過k次這樣的操作後,每個標號的球的期望個數。
input
第1行包含三個正整數n,m,k,表示了標號與球的個數以及操作次數。
第2行包含n個非負整數ai,表示初始標號為i的球有ai個。
output
包含n行,第i行為標號為i的球的期望個數,四捨五入保留3位小數。
sample input
2 3 2
3 0
sample output
1.667
1.333
【樣例說明】
第1次操作後,由於標號為2球個數為0,所以必然是乙個標號為1的球變為標號為2的球。所以有2個標號為1的球,有1個標號為2的球。
第2次操作後,有1/3的概率標號為2的球變為標號為1的球(此時標號為1的球有3個),有2/3的概率標號為1的球變為標號為2的球(此時標號為1的球有1個),所以標號為1的球的期望個數為1/3*3+2/3*1 = 5/3。同理可求出標號為2的球期望個數為4/3。
hint
對於100%的資料,n ≤ 1000, m ≤ 100,000,000, k ≤ 2,147,483,647。
題解 a[i]=a[i]-a[i]/m+a[i-1]/m
推矩陣
發現是個迴圈矩陣,只需記錄第一行即可表示全部矩陣
**
#include
#define mod 1000000007
#define inf 1000000005
#define n 100005
#define pa pair
typedef
long
long ll;
using
namespace
std;
inline
int read()
while (ch>='0'&&ch<='9')
return x*f;
}int n,m,k,s[1005];
double a[1005],ans[1005],tmp[1005];
void mul(double a[1005],double b[1005],double c[1005])
for (int i=1;i<=n;i++)
c[i]=tmp[i];
}int main()
for (int i=1;i<=n;i++)
return
0;}
藍橋杯 取球遊戲
今盒子裡有n個小球,a b兩人輪流從盒中取球,每個人都可以看到另乙個人取了多少個,也可以看到盒中還剩下多少個,並且兩人都很聰明,不會做出錯誤的判斷。我們約定 每個人從盒子中取出的球的數目必須是 1,3,7或者8個。輪到某一方取球時不能棄權!a先取球,然後雙方交替取球,直到取完。被迫拿到最後乙個球的一...
藍橋杯試題 取球遊戲
今盒子裡有 n個小球,a b兩人輪流從盒中取球,每個人都可以看到另乙個人取了多少個,也可以看到盒中還剩下多少個,並且兩人都很聰明,不會做出錯誤的判斷。我們約定 每個人從盒子中取出的球的數目必須是 1,3,7或者 8個。輪到某一方取球時不能棄權!a 先取球,然後雙方交替取球,直到取完。被迫拿到最後乙個...
藍橋杯 取球遊戲(博弈)
今盒子裡有n個小球,a b兩人輪流從盒中取球,每個人都可以看到另乙個人取了多少個,也可以看到盒中還剩下多少個,並且兩人都很聰明,不會做出錯誤的判斷。我們約定 每個人從盒子中取出的球的數目必須是 1,3,7或者8個。輪到某一方取球時不能棄權!a先取球,然後雙方交替取球,直到取完。被迫拿到最後乙個球的一...