bzoj 3811: 玛里苟斯
3811: 瑪里茍斯
Time Limit:?10 Sec??Memory Limit:?256 MBSubmit:?190??Solved:?95
[Submit][Status][Discuss]
Description
魔法之龍瑪里茍斯最近在為加基森拍賣師的削弱而感到傷心,于是他想了一道數學題。 S 是一個可重集合,S={a1,a2,…,an}。 等概率隨機取 S 的一個子集 A={ai1,…,aim}。 計算出 A 中所有元素異或 x, 求 xk 的期望。?
Input
第一行兩個正整數 n, k。 以下 n 行每行一個整數,表示 ai。?
Output
如果結果是整數,直接輸出。如果結果是小數(顯然這個小數是有限的),輸出精確值(末尾不加多余的 0)。?
Sample Input
4 20
1
2
3
Sample Output
3.5首先,對于題目的答案小于263,我們可以看出對于不同的k,ai是不同的:
k=1,ai<263
k=2,ai<232
k=3,ai<221
k=4,ai<216
k=5,ai<213
首先,因此我們依據數據范圍,對于不同的ai有不同的解法。
其次,題目要求輸出精確的小數,由以下推導我們可以知道,小數最多只有.5,不可能存在.25,.125這樣的:
對于求出來了其中一種情況x,他對答案的貢獻是xk*p,其中p是該情況出現的概率。
我們以x=2為例,其他k的情況類似:
我們把這個x按二進制分成了最多n位,也就是最大的數的最高位為n。那么他的k次方是(w0*20+w1*21+w2*22……+wn*2n)*(w0*20+w1*21+w2*22……+wn*2n),展開就是w0*w0*20*20+w0*w1*20*21……wn*wn*2n*2n。其中wi是它每個二進制位的值。
對于每個項wi*wj*2i+j,他存在的情況是wi為1且wj為1,也就是該位異或和為1。那么他的存在的概率為P/2N(N為輸入的數列數字數),P為該兩位皆為1的情況數。
證明題外話:對于數列,我們可以先做個線性基,把線性相關的數字去掉,剩下的都是線性無關的數,這樣方便處理。
我們可以構造一個異或(%2)的增廣矩陣來求解這樣的一個P的數量,x1~xn,即xi代表這個數字是否在集合中,作為一個行向量X,把所有數字按按二進制位分解,每個數字占一列,構造一個矩陣MART.
那么我們求解的是X*MART=ANS,ANS為一個行向量,只有你要求的對應位為1,其余為0。
假如我們求解的是i位和j位,我們的矩陣對應方程差不多是這樣的:
(2333 此處^為異或)
x1*w(1,0)^x2*w(2,0)^x3*w(3,0) ……^xN*w(N,0) =0;
x1*w(1,1)^x2*w(2,1)^x3*w(3,1) ……^xN*w(N,1) =0;
……
x1*w(1,i)^x2*w(2,i)^x3*w(3,i) ……^xN*w(N,i) =1;
……
x1*w(1,j)^x2*w(2,j)^x3*w(3,j) ……^xN*w(N,j) =1;
……
x1*w(1,n)^x2*w(2,n)^x3*w(3,n) ……^xN*w(N,n) =0;
下面還有N-n個方程,對應更高位。畢竟是個矩陣嘛行數等于列數,但它們的w全為0,等號右邊也為0,對求解無影響就不列舉了。
其中w(i,j),j代表數列第i個數字的第j位。
我們經過高斯消元以后弄成上三角,可以得出有t個f[i][i]非零的行,那么只有這t個xi是有唯一解的,其他的xi有多解。因為%2,所以其他xi有2解,那么總共就有2N-t個解,即P=2N-t;
那么wi*wj存在的概率為p/2N=1/(2t);
那么每項對答案的貢獻為2i+j-t。
對于i≠j,i+j≥1,t≤2,因此最多小數點后1位.5。
對于i==j,上述方程只有一行初始為1,所以t≤1,i+j≥0,也是最多.5。
上述結論擴展成k=n的情況,無非是方程等于1的行增加為n。
如果我們求解的位(wi*wj*wt.....)中有k位不同,那么方程等于1的行就縮小為k行,因此i+j+t....≥0+1+……k-1=k*(k-1)/2>=k-1=t-1,k≥2。
∴Σp-t>=-1,p為所求解對應位的位號。對應k=2的貢獻2i+j-t,K=n貢獻為2Σp-t>=2-1。所以最多有一位小數.5。
k=1顯而易見最多/2所以k=1也是最多也是.5。
至此證明完畢。
接下來我們對應數據范圍,提出三種不同范圍下的解法:
k=1時,就求x的期望,它是線性的。對于所有數的所有子集的異或和,我們從他們某個二進制位看。如果有數字該位為1,那么該位有奇數個1和偶數個1的概率是相等的,皆為1/2。為奇數個為該位為1的情況,為1/2。如果沒有則不可能為1,該位始終為0。
那么我們只要把每個數字或一下,然后乘1/2就是答案了。
k=2時,就要按位做了。先做個線性基剔除線性無關的向量。然后把在線性基每位唯一化(即消消元弄成每位上只有一個數字有1),這樣做方便處理獨立性。按照上面證明的展開,那么對于兩位i,j,由k=1可得,如果這兩位獨立的話(即不在同一個數字中相應位為1),那么等概率出現(0,0),(0,1),(1,0),(1,1),(1,1)即wi,wj存在的概率為1/4,不獨立的話只可能等概率出現(0,0)和(1,1),(1,1)概率為1/2。
那么枚舉32位*32位,算算他們均為1的概率P*2i+j,作為答案貢獻加入答案中。
k≥3時,由于ai<221 ,即使枚舉0~ai也最多百萬級別的時間復雜度。我們可以類似線性基求第k小枚舉出所有可能出現的數字。于是我們可以考慮做完線性基后,唯一化,構造新數組存不為0的元素中。
然后枚舉每個數是否加入異或貢獻中,這樣可以求出所有數異或的所有值了。借用之前題目的結論,每個不同的異或值有P=2n-|μ|選擇元素的方法,n為原本數組個數,|μ|為新構造的數組個數。那么每個值出現的概率就是P/總選擇方法數=P/(2n)=1/(2|μ|)的概率,值 乘 概率即為對答案的貢獻。
這里需要做個兩位的高精來保證數字不出現錯誤。
?
轉載于:https://www.cnblogs.com/wujiechao/p/7781140.html
總結
以上是生活随笔為你收集整理的bzoj 3811: 玛里苟斯的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百度云服务器无法访问项目接口,互联网要点
- 下一篇: R语言包(package)以及相关命令语