題目
2n 個人分成2 隊玩足球。每隊每個球員的隊服上有乙個1 到n 的正整數(同乙個隊內的數字不重複)。我們可以知道每個球員的精準度,他可以進行傳球的隊友集合f 和可以把他的球搶走的敵隊球員集合e。當乙個球員接到了球,在恰好一秒鐘後會發生以下的事件:
1) 該球員把球傳給f 集合中的隨意乙個隊員。
2) e 集合中的隨意乙個敵隊球員把球搶走。
3) 該球員射球。
如果該球員射球,他能得分的概率等於他的精準度。在射球之後,不管能否得分,球都會判給敵隊的一號球員。發生以上三種不同事件的概率比是|f| : |e| : 1。概率比取決於當前接到球的球員(|s|代表s 集合的規模),而與之前發生的任何事件無關。「隨意」的意思是所有在集合f(或e)的球員有相同的概率可以從目前帶球的球員得到球(或搶走球)。球在球員之間轉移的時間忽略不計。
比賽從1 隊的1 號球員帶球開始,直到任意一隊得到r 分或已經過了t 秒。對於任何可能的最終比分,計算出得出該比分的概率。
會暴力dp的人會發現,暴力會超時,
這題我們可以無視掉球在球員間的傳遞情況(這個可以預處理),用fi,ti,a,b表示i隊開球,到了ti時刻,比分為a:b的概率
這個我們可以通過兩個函式得到轉移:設gi,j,ti為i隊開球,到了ti時刻j進球的概率,delayi,j,ti為i隊開球,到了ti時刻,j在控球。(當用delay轉移的時候直接把它推到最後時刻,不然會和g轉移的有重複)
對於g和delay,我們可以通過函式h獲得:設hi,j,k,ti為i隊開球,到了ti時刻,球在j隊k球員身上。
對於球員間的轉移,我們可以預處理出pi1,j1,i2,j2為i1隊j1球員傳球i2隊j2球員的概率。(注意,斷球視作傳球,沒射進看做向對方守門員傳球)
進球的概率用shooti1,j1表示。
具體視**,當然自己想出來就更好了。
貼**
#include
#include
#include
#define n 111
#define t 511
#define r 12
#define eps 0.0000001
using
namespace
std;
int n,r,t,nn;
double shoot[2][n],p[2][n][2][n],f[2][t][r][r],g[2][2][t],h[2][2][n][t],ans[r][r],delay[2][t];
void init()
}void work()
for (int ti=0;tifor (int i=0;i<=1;i++)
for (int j=0;jfor (int i=0;i<=1;i++)
for (int j=0;j<=r;j++)
for (int k=0;k<=r;k++)
ans[j][k]+=f[i][t][j][k];
}void write()
int main()
GDOI2016模擬8 8旋轉
alice和bob發明了乙個新的旋轉遊戲。首先,bob給定n個數組成的序列,並把該序列平均分配成若干個塊,每塊正好包含k個數 k能整除n 第一塊由第1到第k個數構成,第二塊由第k 1個數到第2k個數構成,以此類推。接著,bob要求alice對這個序列進行一系列操作,操作有以下兩種 1.把每塊裡面的數...
GDOI2016模擬8 13總結
這次考差了。但事後想了一下,感覺收穫好大。匯報做題情況 當然,裡面不包含收穫 第一題 我的暴力爆零了,原因又是爆int 做題過程中我想到了與眾不同的演算法,一般人會化簡不等式變成斜率優化做,但由於我對斜率優化不大敏感,而且一般斜率優化的題目都是用凸包 叉積來做,這題我也同樣想著用凸包做,但打完發現有...
GDOI2016模擬8 16幫派
農場裡的生活很艱苦,而且當生活很艱苦,你必須堅強起來。奶牛們形成了編號為1到m的幫派。這些幫派一開始和睦相處了一段時間,但是現在失控了!奶牛們在競爭一片大草地的控制權。奶牛之間的衝突發生在連續的若干分鐘內。每一分鐘有乙隻奶牛走進草地。如果此時草地上沒有奶牛,那麼這只新進去的奶牛所在的幫派就能占領這片...