BZOJ 3811 瑪里苟斯(線性基)

2021-08-13 22:28:44 字數 3027 閱讀 6897

description

魔法之龍瑪里苟斯最近在為加基森拍賣師的削弱而感到傷心,於是他想了一道數學題。

s 是乙個可重集合,s=

。等概率隨機取

s 的乙個子集a=

。計算出

a 中所有元素異或

x, 求xk

的期望。

input

第一行兩個正整數n,

k 。以下n

行每行乙個整數,表示ai

。1≤n

≤100000,1

≤k≤5

,ai≥

0 。最終答案小於263

。k=1

,2,3

,4,5

各自占用20%

的資料output

如果結果是整數,直接輸出。如果結果是小數(顯然這個小數是有限的),輸出精確值(末尾不加多餘的0)。

sample input

4 2sample output

3.5solutionk

=1時,考慮每一位對答案的影響,對於第

i 位,如果這

n個數中存在一些數在第

i 位是

1,由於從一些數中選出偶數個數和選出奇數個數概率相等,故有

0.5 的概率在第

i 位是

1,否則對答案的貢獻為

0 ,故只要把這

n個數或起來除

2 即可k=

2時,考慮異或和二進位制下平方的表示,設該異或和二進位制表示為b1

b2..

.bm ,那麼對答案的貢獻為∑i

,jbi

bj2i

+j,考慮bi

=bj=

1 的概率,只看這

n 個數的第

i位和第

j 位,(0

,0)不用考慮,只用考慮(1

,0),

(0,1

),(1

,1) 這三種情況,設這三種分別拿a,

b,c 個,那麼為了得到(1

,1) 需滿足a+

c,b+

c 均為奇數,若

c 為奇數,那麼a,

b都是偶數,若

c 為偶數,那麼a,

b都是奇數,設這

n 個數中這兩位是(1

,0),

(0,1

),(1

,1)這三種情況的分別由a,

b,c 個,那麼如果a=

b=0 ,那麼要得到(1

,1) 只能拿奇數個(1

,1) ,概率是

0.5 ;如果

a>0,

b=0(

a=0,

b>

0 同理),拿奇數個(1

,1) 和偶數個(1

,0) 概率是

0.25

; 如果a,

b>

0 ,則拿奇數個(1

,1) 和偶數個(1

,0) 和偶數個(0

,1) 的概率是

0.125

,拿奇數個(1

,1) 和偶數個(1

,0) 和偶數個(0

,1) 的概率是

0.125

,加起來就是

0.25

,故只要存在(1

,0) 或(0

,1) 概率就是

0.25

,否則概率是

0.5 ,故只需列舉i,

j 考慮著兩位對答案的貢獻即可k≥

3 時,由於答案不超過263

,故線性基維數

m 不會超過

21個,直接求出線性基列舉子集即可求和再除以2m

即可, 但是運算過程中答案可能會超過263

,可以把數

a 表示成a=

⌊a2m

⌋2m+

a%2m

,拿除數和餘數去運算

code

#include

using

namespace

std;

typedef

long

long ll;

typedef

unsigned

long

long ull;

const

int maxn=100005;

int n,k,base[30];

ll a[maxn];

int main()

printf("%llu%s\n",ans>>1,ans&1?".5\n":"\n");

}else

if(k==2)

if(i+j-1-f<0)res++;

else ans+=(1ll<<(i+j-1-f));

}ans+=res>>1;

printf("%lld%s",ans,res&1?".5\n":"\n");

}else

else temp^=base[j];}}

int m=0;

for(int i=0;i<=22;i++)

if(base[i])base[m++]=base[i];

int m=1

<0,res=0;

for(int i=1;iint temp=0;

for(int j=0;jif((i>>j)&1)temp^=base[j];

ll x=0,y=1;

for(int j=0;j>m,y&=(m-1);

}ans+=x,res+=y;

ans+=res>>m,res&=(m-1);

}if(res)printf("%lld.5\n",ans);

else

printf("%lld\n",ans);

}return

0;}

bzoj3811 瑪里苟斯 線性基

description 魔法之龍瑪里苟斯最近在為加基森拍賣師的削弱而感到傷心,於是他想了一道數學題。s 是乙個可重集合,s 等概率隨機取 s 的乙個子集 a 計算出 a 中所有元素異或 x,求 x k 的期望。input 第一行兩個正整數 n,k。以下 n 行每行乙個整數,表示 ai。output ...

BZOJ3811瑪里苟斯

從乙個序列裡面選擇一些數異或起來,求所有異或方案的答案的 k 次方的期望值 n le 100000,1 le k le 5 對於 k 1 的情況,對於每一位分開考慮 如果至少有乙個數的當前位是 1 的,那麼有一半的可能性為 0 也就是如果乙個異或方案為 0 那麼選擇其補就能能得到為 1 的結果 使用...

bzoj 3811 瑪里苟斯

time limit 10 sec memory limit 256 mb submit 190 solved 95 submit status discuss 魔法之龍瑪里苟斯最近在為加基森拍賣師的削弱而感到傷心,於是他想了一道數學題。s 是乙個可重集合,s 等概率隨機取 s 的乙個子集 a 計算...