zoukankan      html  css  js  c++  java
  • 【模板】线性基(洛谷P3812)

    Description

      给定(n)个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。

    Input

      第一行一个数(n),表示元素个数

      接下来一行(n)个数

    Output

      仅一行,表示答案。

    Solution

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    int n;
    long long x,p[60];
    void insert(long long x)
    {
    	for (int i=50;i>=0;i--)
    	{
    		if ((x>>i)&1)
    		{
    			if (!p[i]) 
    			{
    				p[i]=x;
    				break;
    			}
    			else x^=p[i];
    		}
    	}
    }
    int main()
    {
    	scanf("%d",&n);
    	for (int i=1;i<=n;i++)
    	{
    		scanf("%lld",&x);
    		insert(x);
    	}
    	long long ans=0;
    	for (int i=50;i>=0;i--)
    		if ((ans^p[i])>ans) ans^=p[i];
    	printf("%lld
    ",ans);
    	return 0;
    }
    
    
  • 相关阅读:
    12 go实现几中基本排序算法
    5 控制语句
    9 函数
    4. 常量与运算符
    AI
    AI
    AI
    AI
    ML
    ML
  • 原文地址:https://www.cnblogs.com/Code-Geass/p/9929856.html
Copyright © 2011-2022 走看看