靈魂畫師
題目描述
雖然不知道為什麼,但是你一直想用一種神奇的方式完成一幅畫作。
你把n張畫紙鋪成一排,並將它們從1到n編號。你一共有c種顏色可用,這些顏色可以用0到c-1來編號。初始時,所有畫紙的顏色都為1。你一共想進行k次作畫,第i次作畫時,你會等概率隨機地選閉區間[li,ri]內的畫紙的乙個子集(可以為空),再隨機挑一種顏色bi,並把挑出來的畫紙都塗上該顏色。原有顏色a的畫紙在塗上顏色b後,顏色會變成(a*b) mod c,這是這個世界的規律。
因為你將顏色用數字來命名了,因此你可以求出在k次作畫結束後,每張畫紙上的顏色對應的數字相加之和的期望。現在請你程式設計求一下這個值。
以防萬一你不知道什麼是期望:如果乙個量x,它有p1的概率值為v1,有p2的概率值為v2……pn的概率值為vn,則x的期望值等於p1v1+p2v2+……+pnvn
輸入格式
第一行包含3個正整數n, c, k,意義如題所述。
接下來k行,每行包含兩個數li, ri,表示你每次操作會從哪個區間內隨機地選畫紙。
輸出格式
一行,乙個小數,表示答案,四捨五入精確到小數點後3位。
樣例輸入1
231樣例輸出112
2.000樣例解釋一共有4種選擇子集的可能,每種的概率都是1/4。
選空集:畫紙不會發生改變,顏色和是1+1=2;
選:畫紙2不會發生改變。選顏色有3種可能,使得畫紙1最終分別變成顏色0、1、2,概率都是1/3,顏色和的期望是1/3*(0+1)+1/3*(1+1)+1/3*(2+1)=2;
選:與選1對稱,顏色和的期望也是2;
選:選顏色有3種可能,使得兩張畫紙最終都變成顏色0、1、2,概率都是1/3,顏色和的期望是1/3*(0+0)+1/3*(1+1)+1/3*(2+2)=2;
綜上,4種選擇子集的方案的顏色和的期望為2。
樣例輸入2
333樣例輸出21223
13
2.639資料範圍: 思路:
和的期望=期望的和。由於每張紙的初始狀態都是1,所以考慮n3的期望dp。我們用dp[i][j]表示一張紙被操作了i次之後變成顏色j的概率。對每張紙單獨計算,統計操作了幾次。在每次列舉子集時,區間內的每個元素都有二分之一的概率被選中上色,而每種顏色被選中的概率是1/c,然後我們就有了轉移方程,如果被選上:dp[t][i*j%c]+=dp[t-1][i]/(c*2);如果沒被選上:dp[t][i]+=dp[t-1][i]/2;
**:
#include#include#include
using
namespace
std;
int n,c,k,a,b,num[108
],maxn;
double dp[108][108
],ans;
long
long
read()
while(ch>='
0'&&ch<='9')
return x*f;
}int
main()
}dp[
0][1]=1
;
for(int t=1;t<=maxn;++t)
dp[t][i]+=dp[t-1][i]/2
; }
}for(int i=1;i<=n;++i)
}printf(
"%.3lf
",ans);
return0;
}
NOIP2017模擬 鴨舌
題目 小美喜歡吃鴨舌。有乙個 n 個點的樹,每個節點 i 第 i 個點上有 ai 個鴨舌。小美一開始處於 x 號點。每次小美可以選擇乙個與現在的點有邊的點而且那個點還有鴨舌,那麼小美會走到那個點並吃乙個鴨舌。要保證小美最後還是走到 x 號點。問小美最多能吃幾個鴨舌?輸入格式 輸入第一行乙個整數 n ...
NOIP2017模擬 區間
2017.11.3 t1 2032 樣例資料 輸入3 2 1 2 1 1 2 4 5輸出 2 6分析 這道題為什麼要放在t1 考得我懷疑人生。本來也只會暴力找,對於30 的資料我是這樣的 先離散化,再二維陣列記錄所有顏色的在每個位置的字首和,然後四層迴圈暴力查詢。而正解是 先離散化,再把每種顏色的每...
NOIP2017提高組模擬賽4 (總結)
這道題就是很簡單的bfs,可以觀察到n變化到m是近似成倍增長的。其實從最小到最大的變化也就只有30次而已。include include include typedef long long ll using namespace std const int maxl 100 const int oo ...