Horsemeet (勝負的概率)

2021-09-01 05:36:18 字數 1482 閱讀 7809

原題:

題意:

8*8的棋盤,已知兩個馬(走日,無馬腳,每次往各個可行方向走的概率相同)的位置,黑馬先走,吃法同中國象棋,問黑馬贏的概率大還是白馬

解析:

直接暴力每次走完後落在64個格仔上的概率

設:當前由v0→

v1

v_0\to v_1

v0​→v1

​,v0

v_0v0

​有kk

k個方向可以走,當前馬的概率為w

ww,對面馬的概率bbb

那麼顯然此時獲勝的的概率為:w(v

1)∗b

(v1)

w(v_1)*b(v_1)

w(v1​)

∗b(v

1​)

接下來是難點,怎麼維護w?w?

w?對於任何乙個v

0v_0

v0​可以走到的點的概率就直接是1/k

1/k1/

k嗎?實則不然,因為如果上一次對面和落在v

0v_0

v0​,也就是說之前我已經贏了,那麼這部分情況是沒有後續的,所以,概率應該是w(v

0)×(

1/k)

×(1−

b(v0

))

w(v_0)\times (1/k)\times(1-b(v_0))

w(v0​)

×(1/

k)×(

1−b(

v0​)

)

#include

using namespace std;

typedef

double f;

f a[8]

[8],b[8]

[8];

const

double eps =

1e-6

;int di[8]

[2]=

,,,,

,,,}

;f val[8]

[8];

void

init()

val[i]

[j]=

1.0/

(f)co;}}

}int

main()

}}//double s=0;

for(

int i=

0;i<

8;i++)}

//printf("%.5f\n",s);

if(v1-

0.5>eps)

for(

int i=

0;i<

8;i++)}

}for

(int i=

0;i<

8;i++)}

if(v2-

0.5>eps)}if

(!f)

printf

("draw\n");

}

拍手遊戲勝負概率 2014

2014年寫的東西,使用馬爾可夫鏈求簡化的拍手遊戲的勝負概率。我的設想是人機對玩時程式可以 人的動作概率來最大化勝率。ps 其他問題 遊戲介面如何模擬剪刀石頭布的場景,可以讓人們相信對方沒有作弊或非常容易發現對方作弊?原文 我說的拍手遊戲是指這個小時候的遊戲 ab用手勢表示裝彈 防衛和開槍,每拍兩次...

統計勝負結果的SQL語句

統計勝負結果的sql語句,這裡採用子查詢來實現。表結構和資料 date result 2011 02 01 勝 2011 02 01 負 2011 02 01 勝 2011 02 02 勝 2011 02 02 負 採用子查詢 select date,select count from table1...

關於聯合概率 邊際概率 條件概率的區別

一時忘了聯合概率 邊際概率 條件概率是怎麼回事,回頭看看。某離散分布 聯合概率 邊際概率 條件概率的關係 其中,pr x x,y y 為 xy的聯合概率 pr x x 為 x的邊際概率 pr x x y y 為 x基於y的條件概率 pr y y 為 y的邊際概率 從上式子中可以看到 pr x x,y...