2020 区域赛(沈阳) M. United in Stormwind fwt + sosdp
傳送門
文章目錄
- 題意:
- 思路:
題意:
有nnn個試卷,每個試卷有mmm個問題,每個問題有兩個選項a,ba,ba,b,定義兩個試卷不同當且僅當其選中的問題中有一個問題不同。現在問你對于mmm個問題的所有子集,有多少個子集問題不同的對數≥k\ge k≥k個。
1≤n≤2e5,1≤m≤20,1≤k≤n?(n?1)21\le n\le2e5,1\le m\le20,1\le k\le\frac{n*(n-1)}{2}1≤n≤2e5,1≤m≤20,1≤k≤2n?(n?1)?
思路:
我們將不同選項看成010101串,兩個集合不完全相同的話他們的異或肯定不為000,對于我們已經選中的子集SSS來說,他的答案為F(S)=∑i=1n∑j=i+1n[ansi⊕ansj>0]F(S)=\sum_{i=1}^n\sum_{j=i+1}^n[ans_i\oplus ans_j>0]F(S)=∑i=1n?∑j=i+1n?[ansi?⊕ansj?>0]。
考慮將這個式子轉換一下,設cnt[i]cnt[i]cnt[i]代表iii這個二進制出現了幾次,F(S)=12?∑i⊕j=Scnt[i]?cnt[j]F(S)=\frac{1}{2}*\sum_{i\oplus j=S}cnt[i]*cnt[j]F(S)=21??∑i⊕j=S?cnt[i]?cnt[j],這個顯然可以fwtfwtfwt處理出來。
那么考慮SSS對于哪些子集有貢獻,舉個例子,比如子集是110110110,那么他有貢獻的子集集合是100,110,101,010,011,111100,110,101,010,011,111100,110,101,010,011,111,一開始沒注意到101,011101,011101,011這兩個集合,以為直接sosdpsosdpsosdp求一遍超集一遍子集就有了,顯然是不可以的。
正著來不好弄,我們考慮將其容斥一下。
對于110110110,顯然他沒有貢獻到的集合就是001001001的超集,也就是其補集的超集,所以我們做一個容斥,記G[S]G[S]G[S]表示SSS集合中對應答案相同的點對數量,這個可以用sosdpsosdpsosdp求出來超集,答案即為∑i=0(1<<m)?1[n?(n?1)2?G[i]>=k]\sum_{i=0}^{(1<<m)-1}[\frac{n*(n-1)}{2}-G[i]>=k]∑i=0(1<<m)?1?[2n?(n?1)??G[i]>=k]。
總結
以上是生活随笔為你收集整理的2020 区域赛(沈阳) M. United in Stormwind fwt + sosdp的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 陈若仪个人资料简历 陈若仪简介
- 下一篇: wifi密码查看方法 wifi密码查看方