線性基模板

2022-10-08 23:27:23 字數 772 閱讀 8883

線性基:給定\(n\)個非負整數,將每個整數的二進位制看作是向量,求這些向量的一組基。

#include #include #include #include using namespace std;

typedef long long ll;

const int n = 65;

int n;

ll b[n];

ll tmp[n];

bool flag;

void ins(ll x) //插入數字,獲取線性基

else x ^= b[i];}}

flag = true;

}ll find_max() //找到能被表示出來的最大值

return ans;

}ll find_min() //找到能被表示出來的最小值

}}ll get_kth(ll k) //找到第k小的能被表示出來的數

if(b[i]) tmp[cnt++] = b[i];

}if(k >= (1ll << cnt)) return -1;

for(int i = 0; i < cnt; i ++)

}return res;

}bool find_x(ll x) //x是否能被線性基表示出來

}return true;

}int main()

ll ans = find_max();

printf("%lld\n", ans);

return 0;

}

模板 線性基模板

數學太差,直接線性基當資料結構用orz 表示數集 1,2 k 1 表示乙個異或集合 可以說是將原數集壓縮 性質 直接抄的orz,雖然也不是特別懂 0 2.線性基的異或集合中每個元素的異或方案唯一,其實這個跟性質1是等價的。3.線性基二進位制最高位互不相同。1,2n 1 1,2n 1 1,2n 1 5...

模板 線性基

難度較大,請勿棄療 給定n個整數 數字可能重複 求在這些數中選取任意個,使得他們的異或和最大。n 50sample input33 21sample output 3看上去莫名其妙地想貪心。給些定義 s 為無符號整數集 即s n 記為 xor sum s x or s um s s1 s2 s s ...

模板 線性基

給定n個整數 數字可能重複 求在這些數中選取任意個,使得他們的異或和最大。線性基模板可解決 將n個整數看做集合a 線性基即為集合a的子集 線性基中每個元素的異或方案唯一,也就是說,線性基中不同的異或組合異或出的數都是不一樣的。線性基的二進位制最高位互不相同。這樣我們先構造出線性基 然後貪心的去搞最大...