JZOJ 3871. 【NOIP2014八校联考第4场第1试10.19】无聊的游戏(game)
Description
學校的運動會開始了,體能很菜的小可可沒報任何比賽項目,于是和同學們玩一個十分無聊的游戲。
游戲在一個由 n?n 個方格組成的正方形棋盤上進行,首先在每個方格上均勻隨機地填入1到m之間的正整數(每個方格填的數均不同),然后小可可均勻隨機地選出k個1到m的數字(可能選的數不在棋盤上),把它們出現在棋盤上的方格涂黑,設有R行被整行涂黑,有C列被整列涂黑,小可可便可以得到 2R+C 分。
現在小可可想知道他的期望得分是多少,你能幫助他嗎?
Input
第一行包含三個正整數n,m,k。
Output
僅一行包含一個實數,為期望得分,如果答案>10^99,就輸出10^99,輸出被認為正確當且僅當你的輸出與標準輸出的相對誤差不超過10^-6。
Sample Input
1 2 1
Sample Output
2.5
【樣例解釋】
在1*1的方格中填入1,選1或2,得分分別為2^2=4和2^0=1;在1 *1的方格中填入2,選1或2,得分分別為2^0=1和2^2=4,所以期望得分為(4+1+1+4)/4=2.5。
Data Constraint
對于 30% 的數據,2≤n≤5,m≤10;
對于 60% 的數據,2≤n≤10,m≤200;
對于 100% 的數據,2≤n≤300,n?n≤m≤100000,n≤k≤m。
Solution
觀察可知,這里的分數 2x 本質上就是 全涂黑的行列的集合的子集數目。
答案為:
∑r=0n∑c=0nCrn?Ccn?Ck?tm?tCkm這里 t=n?(r+c)?r?c 為 整行、列填黑的格子個數。
其中 Crn?Ccn 為 全涂黑的行列組合,Ckm 為 選數組合,而 Ck?tm?t 為 剩余格子組合 。
這樣只需預處理組合數即可,時間復雜度 O(N2) 。
Code
#include<cstdio> using namespace std; const int N=301; int n,m,k; double f[N];//C(n,i) double g[N*N];//C(m-i,k-i)/C(m,k) double ans; int main() {scanf("%d%d%d",&n,&m,&k);for(int i=f[0]=1;i<=n;i++) f[i]=f[i-1]/i*(n-i+1);for(int i=g[0]=1;i<=m;i++) g[i]=g[i-1]/(m-i+1)*(k-i+1);for(int i=0;i<=n;i++)for(int j=0;j<=n;j++){int t=(i+j)*n-i*j;if(t>k) continue;ans+=f[i]*f[j]*g[t];}printf("%lf",(ans>1e99)?1e99:ans);return 0; }總結
以上是生活随笔為你收集整理的JZOJ 3871. 【NOIP2014八校联考第4场第1试10.19】无聊的游戏(game)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JZOJ 3870. 【NOIP2014
- 下一篇: JZOJ 3875. 【NOIP2014