題解 LOJ6060 Set 線性基

2022-02-23 19:51:42 字數 782 閱讀 9039

orz gql

設所有數的異或和為\(s\),答案是在\(\max (x_1+s\and x_1)\)的前提下\(\min x_1\)輸出\(x_1\)

轉換一下就是\(\max (x_2+s\and x_2),s.t. \max x_2\)

考慮先貪心地求出外層\(\max\)

按位貪心,設\(u_i\)為\(s\)第\(i\)位上的\(bit\) ,\(u_i\)是個\(0/1\)變數

由於滿足要求的\(x_2\)有很多,我們現在要找到最大的那種,就直接線性基套進去就好了。具體實現**帶注釋,文字太難說明了!

相當於復讀gql的**了

//@winlere

#include#include#include#include#includeusing namespace std; typedef long long ll;

inline ll qr()

const int maxn=1e5+5;

ll data[maxn];

ll base[66];

ll num[66];

ll n,s;

inline void insert(ll x)

//假如當前元素可以按照條件一的條件插入,就return了,執行下面的**是條件二

for(register int t=63;t;--t)

if((s&num[t])&&(x&num[t]))

}inline ll top()

int main()

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...

線性基 HDU3949 XOR 題解

給出 n n 個數,求選出的非空集合中異或和第 k role presentation k k小的異或和 異或和相同算一次 沒有 k k 個輸出 1 role presentation 1 1。如果構造線性基時將矩陣消成對角矩陣,得到的線性基就有乙個很棒的性質 最高位為 i i 的數至多只有乙個,且...