• 【模板】线性基


    线性基就是一种可以维护异或和的东西,我还没太懂它到底有什么用,但是很好写,而且思路也很清晰,所以板子还是很简单的。

    题干:

    题目背景
    
    这是一道模板题。
    题目描述
    给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。
    输入输出格式
    输入格式:
    第一行一个数n,表示元素个数
    接下来一行n个数
    输出格式:
    仅一行,表示答案。
    输入输出样例
    输入样例#1: 复制
    2
    1 1
    输出样例#1: 复制
    1
    说明
    1≤n≤50,0≤Si≤250 1 leq n leq 50, 0 leq S_i leq 2 ^ {50} 1≤n≤50,0≤Si​≤250

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<ctime>
    #include<queue>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    #define duke(i,a,n) for(int i = a;i <= n;i++)
    #define lv(i,a,n) for(int i = a;i >= n;i--)
    #define clean(a) memset(a,0,sizeof(a))
    const int INF = 1 << 30;
    typedef long long ll;
    typedef double db;
    template <class T>
    void read(T &x)
    {
        char c;
        bool op = 0;
        while(c = getchar(), c < '0' || c > '9')
            if(c == '-') op = 1;
        x = c - '0';
        while(c = getchar(), c >= '0' && c <= '9')
            x = x * 10 + c - '0';
        if(op) x = -x;
    }
    template <class T>
    void write(T x)
    {
        if(x < 0) putchar('-'), x = -x;
        if(x >= 10) write(x / 10);
        putchar('0' + x % 10);
    }
    ll ans,p[100];
    int n;
    void get_num(ll x)
    {
        lv(i,62,0)
        {
            if(!(x >> (ll)i))//一开始这里写错了,其实就是判断这一位是否为1
                continue;
            if(!p[i])
            {
                p[i] = x;
                break;
            }
            x ^= p[i];
        }
    }
    int main()
    {
        read(n);
        duke(i,1,n)
        {
            ll x;
            read(x);
            get_num(x);
        }
        lv(i,62,0)
        {
            if((ans ^ p[i]) > ans)
            ans ^= p[i];
        }
        printf("%lld
    ",ans);
        return 0;
    }
  • 相关阅读:
    hdu 4614 线段树 二分
    cf 1066d 思维 二分
    lca 最大生成树 逆向思维 2018 徐州赛区网络预赛j
    rmq学习
    hdu 5692 dfs序 线段树
    dfs序介绍
    poj 3321 dfs序 树状数组 前向星
    cf 1060d 思维贪心
    【PAT甲级】1126 Eulerian Path (25分)
    【PAT甲级】1125 Chain the Ropes (25分)
  • 原文地址:https://www.cnblogs.com/DukeLv/p/9683894.html
Copyright © 2020-2023  润新知