有nn
個箱子裝著m
m個玩具(乙個玩具可以在多個箱子內),求有多少種選擇箱子的方案使得每種玩具至少有乙個。設f[
i]f[
i]表示∑s1(
s&i=
s)∑s
1(s
&i=s
),也就是選擇其中一些箱子,會得到乙個玩具集合s
s(狀壓後),如果i
i完全包含ss,f
[i]f
[i]就加一。
那麼f[ma
xn−1
−i]f
[max
n−1−
i]就是沒有乙個玩具在集合i
i中的方案數。
顯然答案就是∑s
−1∣s
∣×(2
f[ma
xn−1
−i]−
1)s∑
−1∣
s∣×(
2f[m
axn−
1−i]
−1)對於求f
f,可以考慮使用分治。
顯然f[i]
&f[i
+mid
]=f[
i]f[
i]&f
[i+m
id]=
f[i]
,因為若f[i
]f[i
]是abc
dabc
d,則f[i
+mid
]f[i
+mid
]是1ab
cd1a
bcd這樣時間複雜度就降到了o(2
mlog2
m)o(
2mlog2m)
。
#include
#include
using
namespace std;
typedef
long
long ll;
const
int n=
1000010
,mod=
1e9+
7,m=(1
<<20)
+10;int n,m,ans,maxn,cnt[m]
,f[m]
,power[n]
;void
work
(int l,
int r)
int mid=
(l+r)/2
;work
(l,mid)
;work
(mid+
1,r)
;for
(int i=l;i<=mid;i++
) f[i-l+mid+1]
+=f[i];}
intmain()
cnt[s]++;
}work(0
,maxn-1)
; power[0]
=1;for
(int i=
1;i<=n;i++
) power[i]
=power[i-1]
*2%mod;
cnt[0]
=1;for
(int i=
0;i)printf
("%d\n"
,(ans%mod+mod)
%mod)
;return0;
}
3 17學習計畫
1 做一套計算機二級的題目 2 背英語單詞,記筆記 4 做模電作業,課堂檢測和課後作業 1 和往常一樣,空閒的時候,在手機上做了選擇題 有電腦的時候,直接做大題。做了很多題目之後,現在對word算是比較熟悉了,基本上首先是要看是另存為,還是以什麼名字儲存。其次基本上都要調整頁面大小,頁邊距這些。當然...
3 17考試小記
考場上來讀完第一題第一反應就是網路流,看上去應該是乙個最小割或者費用流。第二題看上去好像是一道傳統計數題,可能要n 2遞推 組合數或者容斥可能會很麻煩。第三題題面很長,讀完發現就是一道lct維護子樹資訊,而且細節很多,很毒瘤。但是部分分給的很多,但是種類有點多,貌似每乙個部分分都不那麼好打,而且最後...
藍橋杯練習 3 17
旅行家的預算 貪心 問題描述 乙個旅行家想駕駛汽車以最少的費用從乙個城市到另乙個城市 假設出發時油箱是空的 給定兩個城市之間的距離d1 汽車油箱的容量c 以公升為單位 每公升汽油能行駛的距離d2 出發點每公升汽油 p和沿途油站數n n可以為零 油站i離出發點的距離di 每公升汽油 pi i 1,2,...