首页 > 其他分享 >线性代数初步

线性代数初步

时间:2024-04-18 23:33:52浏览次数:35  
标签:sum long 初步 异或 线性代数 ret 线性 oplus

异或线性基

模板题:【模板】线性基

一个数列 \(a\) 的异或线性基 \(p\) 满足:\(a\) 的任意子集的异或和 \(sum\),必然能在 \(p\) 中找到一个子集,其异或和也为 \(sum\)。

思路

先考虑构造 \(a=\{x,y\}\) 的异或线性基。

构造 \(p=\{x,x\oplus y\}\)。

\(a\) 的子集异或和与 \(p\) 的子集异或和对应:

  1. \(a'=\{x\},p'=\{x\},sum=x\)

  2. \(a'=\{y\},p'=\{x,x\oplus y\},sum=y\)

  3. \(a'=\{x,y\},p'={x\oplus y},sum=x\oplus y\)

这是组成异或线性基的基本单位,整体异或线性基的构造思路与之基本相同。

异或线性基的构造方式为增量法,令当前异或线性基为 \(p\),(\(p_i\) 表示异或线性基中二进制最高位为 \(i\) 的数),新加入的数为 \(x\),流程如下:

  • 令 \(x\) 最高位为 \(b\),分类讨论:

    • 若 \(p\) 中没有最高位为 \(b\) 的数,直接将 \(x\) 加入即可。(\(p_b\gets x\))

    • 否则,将 \(x\) 异或上 \(p_b\),将 \(b\) 更新为 \(x\) 现在的最高位,再次分类讨论(\(x\gets x\oplus p_b\))

这样,异或线性基内二进制下长度相同的的数只会有一个,其大小为 \(O(v)\) 级别。

现在考虑查询子集异或最大值,根据异或线性基的定义。

\(i\) 从大到小枚举 \(p_i\),有性质:若加入 \(p_i\) 能使答案变大,选它一定更优。(后面的最高位比 \(i\) 小)

直接不断更新 \(ans=\max(ans,ans\oplus p_i)\) 即可。

代码

#include <bits/stdc++.h>
using namespace std;
long long n, p[55];
inline void insert(long long x) {
    for (int i = 51; i >= 0; i--) {
        if (!(x >> i & 1))
            continue;

        if (!p[i]) {
            p[i] = x;
            break;
        }

        x ^= p[i];
    }
}
inline long long query() {
    long long ret = 0;

    for (int i = 51; i >= 0; i--)
        ret = max(ret, ret ^ p[i]);

    return ret;
}
int main() {
    cin >> n;

    while (n--) {
        long long x;
        cin >> x;
        insert(x);
    }

    cout << query();
    return 0;
}

标签:sum,long,初步,异或,线性代数,ret,线性,oplus
From: https://www.cnblogs.com/wangxuzhou-blog/p/18144763/preliminary-linear-algebra

相关文章

  • 容斥原理初步
    容斥原理1.容斥原理容斥原理用来解决求解\(|\bigcup_{i=1}^{n}A_i|\)的问题.具体的,定义\(U=\{i|i\in\mathbb{Z},i\in[1,n]\}\),我们有公式:\[|\bigcup_{i=1}^{n}A_i|=\sum_{S\inU}(-1)^{|S|+1}|\bigcap_{i\inS}A_i|\]由公式形式也不难观察到容斥原理可以化并为交.2.......
  • [学习笔记] 高斯消元 - 线性代数
    高斯-约旦消元下面给两道板子【模板】高斯消元法最最基础的板子,没啥哆嗦的。下面给出高斯-约旦消元解法。#include<bits/stdc++.h>usingnamespacestd;intn,dt=1;doubleeps=1e-9,m[102][102];intmain(){ scanf("%d",&n); for(inti=1;i<=n;++i) for(intj......
  • 达梦数据库-初步学习
    达梦数据库-初步学习sql连接方式su-dmdbacd/data//data/dm/bin/disqlSYSDBA/[email protected]:5236数据库信息查看查看当前数据库中存在的模式​select*fromSYSOBJECTStwheret."TYPE$"='SCH';​查看所有表空间​SELECT*FROMV$TABLESPACE;​表空间信息......
  • 《线性代数的本质》笔记(09)
    09-基变换基向量不同,则相同坐标的向量实际上并不是同一个。将新的基向量看作是线性变换,则其列应该是原本的基向量现在的位置。将一个新坐标系下的向量a(x,y)转换到我们的坐标系中:用这个矩阵乘以这个向量。原因:用两组基向量分别表示向量在两个坐标系下的位置,则结果应该是相同的。所......
  • 《线性代数的本质》(06-附注2-07)
    06-逆矩阵、列空间、秩与零空间线性方程组:A\(\vec{x}\)=\(\vec{v}\)线性代数的一个作用:帮助我们处理线性方程组。形式:矩阵与向量的乘法。几何意义:寻找一个向量\(\vec{x}\),这个向量在特定的线性变换之后与目标向量\(\vec{v}\)重合。行列式不等于0:有且仅有一个向量再变......
  • 15--Scrapy01:介绍与初步使用
    Scrapy01--基本介绍与初步使用一、爬虫工程化何为工程化,就是让你的程序更加的有体系,有逻辑,更加的模块化.到目前为止,我们所编写的爬虫我们都是从头到尾的每一步都要亲力亲为.这样做固然有其优点(可控性更好),但是各位请认真思考.这样的代码逻辑是不能形成批量生产的效果的(写10......
  • EasyUEFI 初步分析
    EasyUEFI初步分析GUI采用foxtoolkit,分析主要关注对应类的FX::FXMetaClass,结合构造函数定位控件对应FXMapEntry中的事件函数fox-toolkit.orgpatch1根据字符串信息可定位到版本判断函数,关键点在454E10patch2完成上一步后发现启动后弹出注册框,关闭后不影响使用,可定位注册......
  • 《线性代数的本质》笔记(04-附注1-05)
    04-矩阵乘法与线性变换复合的联系问:如何描述连续两个线性变换?答:先左乘一个矩阵,再左乘一个。如果我们用一个矩阵来描述这个复合过程,那么这个矩阵应该等于两个矩阵的乘积,这就是矩阵的乘法。如何理解上图:把右侧矩阵M2看作看作第一次变换后的\(\hat{i}\)向量和\(\hat{j}\)向量,......
  • 升鲜宝供应链管理--某个客户的海鲜集散配送平台的需求初步理解(一)
     升鲜宝供应链管理--某个客户的海鲜集散配送平台的需求初步理解(一) 一、初步理解的业务架构:    二、业务描述:    多运营点运营。首先按一个运营点试点,按不同的城市聚合商家(客户)的海鲜订单,实现以销订采,对不同类型的商家(客户)实现不同的结算方式,针对水产品的特......
  • 《线性代数的本质》笔记(01-03)
    前言:本系列为《线性代数的本质》的笔记,作者为3Blue1Brown大神,视频的b站链接为https://www.bilibili.com/video/BV1ys411472E/?spm_id_from=333.999.0.0&vd_source=cb7d5dd830bc59a85c459b0b14a2e685看了这个系列视频后我受益匪浅,为了方便后续回顾所以整理成了文字资料。我强烈......