P3812-[模板]线性基
生活随笔
收集整理的這篇文章主要介紹了
P3812-[模板]线性基
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
正題
題目鏈接:https://www.luogu.com.cn/problem/P3812
題目大意
給出nnn個數,求在其中選出若干個數使得它們的異或和最大。
解題思路
序列aaa的線性基bbb滿足以下性質
如何用線性基求該題?求序列aaa的最大異或和其實就是求其線性基的最大異或和,而且我們知道對于線性基中的數did_idi?滿足它的i+1i+1i+1位為111。
所以對于每個did_idi?如果答案異或上他可以變大那么久異或上它即可。
時間復雜度O(50n)O(50n)O(50n)
codecodecode
#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; ll n,d[60]; void add(ll x){for(ll i=51;i>=0;i--){if(x&(1ll<<i)){if(d[i])x^=d[i];else{d[i]=x;break;}}}return; } int main() {scanf("%lld",&n);for(ll i=1;i<=n;i++){ll x;scanf("%lld",&x);add(x);}ll ans=0;for(ll i=51;i>=0;i--)if(ans<(ans^d[i]))ans=ans^d[i];printf("%lld",ans); }總結
以上是生活随笔為你收集整理的P3812-[模板]线性基的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: P4331-[BalticOI2004]
- 下一篇: P4570-[BJWC2011]元素【线