loj114 k大異或和 線性基 特判

2022-05-20 09:24:24 字數 639 閱讀 2001

題目描述

給由 $n​$ 個數組成的乙個可重集 $s​$ ,每次給定乙個數 $k​$ ,求乙個集合 $t⊆s​$ ,使得集合 $t​$ 在 $s​$ 的所有非空子集的不同的異或和中,其異或和 $t_1\ \text\ t_2\ \text\ …\ \text\ t_​$ 是第 $k​$ 小的。求這個第 $k$ 小的異或和。

題解線性基+特判

板子題沒什麼好說的,直接求出嚴格線性基,由於每個最高位只有乙個因此按位判斷即可。

關鍵在於乙個特判:原來的可重集可能能夠組成0,也可能不能夠組成0,需要判斷一下0是否算在內。

時間複雜度 $o(n\log n)$ 

#include #include using namespace std;

typedef long long ll;

ll a[100010] , tot;

int main()

for(j = 1ll << 49 ; j ; j >>= 1)

for(i = 1 ; i <= n ; i ++ )

if(a[i] == 0)

flag = 1;

scanf("%d" , &m);

while(m -- ) }

return 0;

}

LOJ114 K大異或和 線性基

給出乙個n 1 e5 n leq1e5 n 1e 5的可重集合,求這個集合的第k kk小異或和。首先直接對n nn個數消元,然後把高位之後的1 11也盡可能消去,取出所有的非零的基向量。特判掉可能為0 00的情形 當且僅當非零基向量小於元素個數 剩下的t tt個基向量共有2t 12 1 2t 1 種...

LOJ 114 K大異或和 線性基

題目鏈結 需要注意如果線性基中表示的向量不足n個,說明一定存在一組向量滿足線性相關關係,即存在xor和為0的情況。這樣要使k減1。判斷是k 1 include include define gc getchar define maxin 100000 define gc ss tt tt ss in...

LOJ 114 k 大異或和 線性基 貪心

傳送門 loj114 注意構造的線性基a ia i ai 需要滿足 若第i,j i,ji,j位上都有值,則ai 2j 0 a i 2 j 0 ai 2j 0且a j i 0a j i 0 aj i 0,這樣從高位到低位貪心才滿足只決策了當前位。需要特判非空子集中是否存在0 includeusing ...