從乙個序列裡面選擇一些數異或起來,求所有異或方案的答案的 \(k\) 次方的期望值
\(n \le 100000,1\le k \le 5\)
對於 \(k=1\) 的情況,對於每一位分開考慮
如果至少有乙個數的當前位是 \(1\) 的,那麼有一半的可能性為 \(0\)
也就是如果乙個異或方案為 \(0\) 那麼選擇其補就能能得到為 \(1\) 的結果
使用期望的線性性即可
對於 \(k>1\) 的部分,平方的時候二進位制位的貢獻並不獨立,所以需要分開考慮
發現題目中說的 \(ans \le 2^\),那麼對於 \(k \ge 3\) 的,對原序列建立線性基,其大小不會超過 \(63/3=21\)
原序列能異或出來的數,每個會重複 \(2^\) 次,所以期望就是 \(\frac \)
所以這個部分 \(dfs\) 或者直接狀壓即可
剩餘的 \(k=2\) 的部分考慮平方的本質是兩個位相乘進行貢獻,考慮兩個帶 \(1\) 的位置是不是能進行貢獻
如果是乙個數中兩個位置不同,注意這裡要再除掉 \(2\) 因為這裡的異或方案不足
#includeusing namespace std;
#define int long long
namespace yspm
int p[30],s,siz,n,m,pos,las,cnt;
ul ans,a[100010];
inline void insert(int x)
else x^=p[i];
} return ;
} inline void solve()
if(!fg1||!fg2)continue;
if(i+j-fg3-1<0)res++;
else ans+=1ull<<(i+j-fg3-1);}}
ans+=res>>1; res&=1;
printf("%llu",ans);
if(res)printf(".5\n");
else puts("");
return ;
} signed main()
if(m==2) solve();
if(m>=3)
int r1=0,r2=1;
for(int j=1;j<=m;++j)
ans+=r1; las+=r2; ans+=las>>pos; las&=s-1;
} printf("%lld",ans); if(las) puts(".5"); else puts("");
} return 0; }}
signed main()
``
bzoj 3811 瑪里苟斯
time limit 10 sec memory limit 256 mb submit 190 solved 95 submit status discuss 魔法之龍瑪里苟斯最近在為加基森拍賣師的削弱而感到傷心,於是他想了一道數學題。s 是乙個可重集合,s 等概率隨機取 s 的乙個子集 a 計算...
BZOJ 3811 瑪里苟斯(線性基)
description 魔法之龍瑪里苟斯最近在為加基森拍賣師的削弱而感到傷心,於是他想了一道數學題。s 是乙個可重集合,s 等概率隨機取 s 的乙個子集a 計算出 a 中所有元素異或 x,求xk 的期望。input 第一行兩個正整數n,k 以下n 行每行乙個整數,表示ai 1 n 100000,1 ...
bzoj3811 瑪里苟斯 線性基
description 魔法之龍瑪里苟斯最近在為加基森拍賣師的削弱而感到傷心,於是他想了一道數學題。s 是乙個可重集合,s 等概率隨機取 s 的乙個子集 a 計算出 a 中所有元素異或 x,求 x k 的期望。input 第一行兩個正整數 n,k。以下 n 行每行乙個整數,表示 ai。output ...