bzoj4204 取球遊戲

2021-08-09 09:13:48 字數 1411 閱讀 5881

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先取球,然後雙方交替取球,直到取完。被迫拿到最後乙個球的一...