UOJ 36 清華集訓2014 瑪里苟斯

2022-07-24 09:00:26 字數 882 閱讀 4769

題目大意:給n個數字,求子集的異或和的k次方的期望(n<=10^5,k<=5,保證答案小於2^63)

做法:首先如果從集合中拿出a和b,把a和a xor b放回集合,子集的異或和與原來是一一對應的,用高斯消元的思想可以消到只剩log個數,其他都是0,對答案沒有影響。然後考慮k次方的期望,我們把二進位制下每一位拆開,假設第i位的數字為xi,答案為(x1+x2+...+xlog)^k的期望,展開式子後發現是選k次x1~xlog中的數(可以重複選),每種選法選的位的乘積的期望的和,暴力列舉每種選法,複雜度為log^k(顯然在k比較大時,由於答案範圍限制,log不會太大,所以複雜度可以接受),一種選法只有選出的位都為1才對答案有貢獻,列出方程然後高斯消元計算合法方案,每種方案的貢獻必然是2的次冪並且冪數最小為-1,運算時直接記是多少次冪,算完再乘個2加入答案,最後判是否是奇數輸出.5即可。

**:

#include#include

#define ll unsigned long longll read()

ll z[

64],ans;

int mx,k,a[5],t[5

];void dfs(int

x)

for(x=(1

<1,i=k;i--;s+=a[i])if(x&(1

if(!x)ans+=1ull

; }

for(int i=0;i<=mx;++i)a[x]=i,dfs(x+1);}

intmain()

for(mx=64;mx--;)if(z[mx])break

; dfs(0);

printf(

"%lld%s

",ans>>1,ans&1?"

.5":""

);}

UOJ37 清華集訓2014 主旋律

link 然後列舉縮點之後的dag的情況,考慮計算可行的邊集方案數,再遞迴乘上所有scc的匯出子圖的答案。計算可行的邊集方案數可以考慮dp,設 f s 表示點集 s 的匯出子圖中使得子圖形成乙個dag的邊集方案數,那麼可以得到轉移 f s sum limits 1 f 2 其中 cnt 表示的是起點...

UOJ 42 清華集訓2014 Sum

首先把底數 1 消掉 1 n 1 2 times n 2 1 2 times n lfloor frac n 2 rfloor times 2 令 k sqrt r 所以原式等於 begin sum limits n 1 sum limits n 1 2 times lfloor ik rfloor...

UOJ37 清華集訓2014 主旋律

設 f s 為點集 s 中強連通生成子圖的方案數,cnt s 為點集 s 構成的誘導子圖中邊的個數。考慮用 2 減去不合法方案數來計算 f s 不合法情況即為縮點後為 dag 設 h s 為點集 s 縮點後構成點數 1 的 dag 的方案數。考慮列舉乙個點集 t 其由若干個出度為 0 的強連通分量構...