做實驗 解題報告(二進位制列舉子集)

2022-08-19 05:27:13 字數 1075 閱讀 6646

有一天,你實驗室的老闆給你布置的這樣乙個實驗。

首先他拿出了兩個長度為 n 的數列 a 和 b,其中每個 a i 以二進位制表示乙個集

合。例如數字 5 = (101) [2] 表示集合 。第 i 次實驗會準備乙個小盒子,裡面裝

著集合 a i 所有非空子集的紙條。老闆要求你從中摸出一張紙條,如果滿足你摸出的

紙條是 a i 的子集而不是 a i−b i ,a i−b i +1 ,...,a i−1 任意乙個的子集,那麼你就要被阿掉;

反之,你就逃過一劫。

令你和老闆都沒有想到的是,你竟然每次都逃過一劫。在慶幸之餘,為了知道

這件事發生的概率,你想要算出每次實驗有多少紙條能使你被阿掉

第一行乙個數字 n。

接下來 n 行,每行兩個整數,分別表示 a i 和 b i 。

n 行,每行乙個數字,表示第 i 次實驗能使你被啊掉的紙條數。

樣例輸入 1

37 0

15 1

3 1樣例輸出 178

04對於 30% 的資料,n, a i , b i ≤ 100

對於 70% 的資料,n, a i , b i ≤ 60000

對於 100% 的資料,n, a i , b i ≤ 10 5

保證所有的 a i 不重複,b i < i

#include #include #define ll long long

#define r register

#define file(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);

using namespace std;

inline int read()

while (c>='0'&&c<='9')

return x*f;

}const int maxn=1e5+5;

int n,a,b,ans,f[maxn];

void init()

void doit()

printf("%d\n",ans); }}

signed main()

二進位制列舉子集

利用二進位制的 開關 特性列舉 詳細為 如果給定集合a大小為n,則想象a 的每乙個元素相應乙個開關位 0或1 0表示不出現,1表示出現。當每乙個元素的開關位的值確定時,就得到乙個子集。因此共同擁有2 n 1種情況 全0為空集,這裡不考慮 我們利用區間 1,2 n 1 該區間上的每乙個整數相應乙個子集...

技巧 二進位制法列舉子集

我們來看乙個可以用二進位制列舉的方法解決的題目 話說大詩人李白,一生好飲 幸好他從不開車 一天,他提著酒壺,從家裡出來,酒壺中有酒兩斗 他邊走邊唱 無事街上走,提壺去打酒 逢店加一倍,遇花喝一斗 這一路上,他一共遇到店 5 次,遇到花 10 次,已知最後一次遇到的是花,他正好把酒喝光了 請你計算李白...

位運算二進位制列舉子集 李白喝酒

話說大詩人李白,一生好飲。幸好他從不開車。一天,他提著酒壺,從家裡出來,酒壺中有酒兩斗。他邊走邊唱 無事街上走,提壺去打酒。逢店加一倍,遇花喝一斗。這一路上,他一共遇到店 5 次,遇到花 10 次,已知最後一次遇到的是花,他正好把酒喝光了。請你計算李白遇到店和花的次序,有多少種可能的方案。我們已知遇...