zoukankan      html  css  js  c++  java
  • Evanyou Blog 彩带

      题目传送门

    线性基

    题目描述

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

    输入输出格式

    输入格式:

     

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

    接下来一行n个数

     

    输出格式:

     

    仅一行,表示答案。

     

    输入输出样例

    输入样例#1: 
    2
    1 1
    输出样例#1: 
    1

    说明

    $1 leq n leq 50, 0 leq S_i leq 2 ^ {50}$


      分析:

      一道线性基模板。<不会线性基的看这里>

      直接构造线性基然后贪心选取异或得到最大答案即可.

      Code:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=70;
    ll n,b[N],ans;
    int main()
    {
        scanf("%lld",&n);ll x;
        for(ll i=1;i<=n;i++){
            scanf("%lld",&x);
            for(ll j=60;j>=0;j--){
                if(!(x>>j))continue;
                if(!b[j]){b[j]=x;break;}
                else x^=b[j];
                
            }
        }
        for(ll i=60;i>=0;i--){
        if((ans^b[i])>ans)ans^=b[i];}
        printf("%lld",ans);
        return 0;
    }
  • 相关阅读:
    一些 SQLite技巧
    linux增加swap空间
    linux解压命令
    数据库常用语句
    服务器命令
    Clickhouse高可用配置总结
    MySQL笔记
    Linux查看硬件信息
    Greenplum安装
    ClickHouse学习笔记
  • 原文地址:https://www.cnblogs.com/cytus/p/9330114.html
Copyright © 2011-2022 走看看