日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

bzoj 3811: 玛里苟斯(期望+线性基)

發(fā)布時間:2023/12/14 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bzoj 3811: 玛里苟斯(期望+线性基) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

3811: 瑪里茍斯

Time Limit:?10 Sec??Memory Limit:?256 MB
Submit:?223??Solved:?98
[Submit][Status][Discuss]

Description

魔法之龍瑪里茍斯最近在為加基森拍賣師的削弱而感到傷心,于是他想了一道數(shù)學(xué)題。 S 是一個可重集合,S={a1,a2,…,an}。 等概率隨機(jī)取 S 的一個子集 A={ai1,…,aim}。 計(jì)算出 A 中所有元素異或 x, 求 xk 的期望。

Input

第一行兩個正整數(shù) n, k。 以下 n 行每行一個整數(shù),表示 ai。

Output

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

Sample Input

4 2 0 1 2 3

Sample Output

3.5


比較難的題

求出n個數(shù)的線性基,線性基中每個集合的異或和都唯一,并且屬于滿射

所以可以暴力線性基的所有集合異或和,然后加在一起除以2^cnt就是答案了(cnt為線性基元素個數(shù))

但是線性基中最多有62個數(shù),暴力是不行的

考慮按k分情況討論

①k>=3:

因?yàn)榇鸢覆粫^long long范圍,所以線性基中所有元素不會超過64/3個,可以直接暴力

不過注意一個坑:答案不會超過long long但是你計(jì)算所有異或和最后要除以2^cnt才是答案,所以計(jì)算所有貢獻(xiàn)的過程中可能會爆long long,要邊計(jì)算邊除,也就是將val寫成val/(2^cnt)和val%(2^cnt)兩部分;

②k = 1:

不能暴力了,假設(shè)某個數(shù)ai轉(zhuǎn)成二進(jìn)制后第k位為1,因?yàn)檫@個數(shù)被選的概率剛好是1/2,并且很明顯,無論它和誰異或,這個1一定都會有剛好1/2的概率對答案有貢獻(xiàn),所以可以發(fā)現(xiàn)答案就是所有數(shù)or起來/2

③k = 2:

假設(shè)某個集合的異或和為x,x轉(zhuǎn)成二進(jìn)制后是bm…b1b2b3(bm表示二進(jìn)制第m位,0/1),那么x2就等于∑bibj*2^(i+j),當(dāng)且僅當(dāng)?shù)趇位第j位都為1時,對答案計(jì)算有2^(i+j)的貢獻(xiàn),用上面k=1的思想可以輕松得出這個概率是1/4(有00, 10, 01, 11四種情況各1/4),不過,當(dāng)所有數(shù)第i位和第j位都相同時,概率會變?yōu)?/2(只有00,11兩種情況),當(dāng)所有數(shù)第i位都為0或者第j位都為0時概率為0


#include<stdio.h> #define LL unsigned long long LL a[100005], p[66], jz[66], er[66] = {1}; int main(void) {LL ans, temp, mod, c, d;int i, j, k, cnt, n, flag;scanf("%d%d", &n, &k);for(i=1;i<=62;i++)er[i] = er[i-1]*2;for(i=1;i<=n;i++)scanf("%llu", &a[i]);if(k==1){ans = 0;for(i=1;i<=n;i++)ans |= a[i];printf("%llu", ans/2);if(ans%2)printf(".5");}else if(k==2){temp = 0;for(i=1;i<=n;i++)temp |= a[i];mod = ans = 0;for(i=62;i>=0;i--){for(j=62;j>=0;j--){if((temp&(1ll<<i))==0 || (temp&(1ll<<j))==0)continue;flag = 1;for(k=1;k<=n;k++){if((a[k]&(1ll<<i)) && (a[k]&(1ll<<j))==0 || (a[k]&(1ll<<i))==0 && (a[k]&(1ll<<j))){flag = 0;break;}}if(flag){ans += er[i+j]/2;mod += er[i+j]%2;}else{ans += er[i+j]/4;if(er[i+j]%4)mod++;}}}printf("%llu", ans+mod/2);if(mod%2)printf(".5");}else{cnt = 0;for(i=1;i<=n;i++){for(j=62;j>=0;j--){if(a[i]&(1ll<<j)){if(p[j]==0){p[j] = a[i];jz[cnt++] = p[j];break;}elsea[i] ^= p[j];}}}ans = mod = 0;for(i=0;i<(1ll<<cnt);i++){temp = 0;for(j=0;j<=cnt-1;j++){if(i&(1ll<<j))temp ^= jz[j];}c = 0, d = 1;for(j=1;j<=k;j++){c *= temp, d *= temp;c += d/er[cnt], d %= er[cnt];}ans += c, mod += d;ans += mod/er[cnt], mod %= er[cnt];}printf("%llu", ans);if(mod)printf(".5");}printf("\n");return 0; }


總結(jié)

以上是生活随笔為你收集整理的bzoj 3811: 玛里苟斯(期望+线性基)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。