社交网站开发实例,wordpress 同城小程序,本地开发app的公司地址,在线制作名片生成器正题
题目链接:https://www.luogu.com.cn/problem/P3812 题目大意
给出nnn个数#xff0c;求在其中选出若干个数使得它们的异或和最大。 解题思路
序列aaa的线性基bbb满足以下性质 aaa中的任何一个数都可以由bbb中的若干个数异或得到bbb中的任何一个数都不可由bbb中的若干个…正题
题目链接:https://www.luogu.com.cn/problem/P3812 题目大意
给出nnn个数求在其中选出若干个数使得它们的异或和最大。 解题思路
序列aaa的线性基bbb满足以下性质
aaa中的任何一个数都可以由bbb中的若干个数异或得到bbb中的任何一个数都不可由bbb中的若干个数异或得到bbb是满足性质1,21,21,2的最小集合
如何用线性基求该题求序列aaa的最大异或和其实就是求其线性基的最大异或和而且我们知道对于线性基中的数did_idi满足它的i1i1i1位为111。
所以对于每个did_idi如果答案异或上他可以变大那么久异或上它即可。
时间复杂度O(50n)O(50n)O(50n) codecodecode
#includecstdio
#includecstring
#includealgorithm
#define ll long long
using namespace std;
ll n,d[60];
void add(ll x){for(ll i51;i0;i--){if(x(1lli)){if(d[i])x^d[i];else{d[i]x;break;}}}return;
}
int main()
{scanf(%lld,n);for(ll i1;in;i){ll x;scanf(%lld,x);add(x);}ll ans0;for(ll i51;i0;i--)if(ans(ans^d[i]))ansans^d[i];printf(%lld,ans);
}