首页 > 其他分享 >线性基

线性基

时间:2023-12-04 21:11:06浏览次数:25  
标签:基中 int 序列 异或 线性 放入

问题
洛谷P3812
给定一个长度为\(n\)的序列,值域\(2^50\),求在序列中选出若干个数的异或和最大值。
思路:
使用线性基,流程为,枚举\(n\)个数,每个数从二进制最高位向低位枚举,如果这个数含有这一位且这一位未放入任何数,直接放入,如果这个数有这一位但是放入了数,这个数就异或上已经放入的数。
首先证明原序列中的数能异或出的异或和和线性基中的完全等同,因为线性基的数都是原序列异或出来的,所以线性基中能组成的异或和原序列也可以,又因为在刚才的流程中原序列中的数不断地被线性基中的数异或,所以原序列中的数都可以被线性基的异或和表示,综上所述,原序列中的数能得出的异或和和线性基中的完全等同。
得到线性基数组\(a\),其有一个性质,\(a_i\)要么为\(0\),要么最高位为第\(i\)为,可以理解为流程中放不进去就异或是删掉最高位。
贪心每次找最高位让它为一。
代码

#include<iostream>
#define int long long
using namespace std;
int n;
int a[100];
int b[100];
int ans=0;
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		for(int j=60;j>=0;j--){
			if((a[i]&(1ll<<j))!=0){
				if(b[j]==0){
					b[j]=a[i];
				}
				a[i]^=b[j];
			}
		}
	}
	for(int j=60;j>=0;j--){
		if(b[j]!=0&&(ans&(1ll<<j))==0){
			ans^=b[j];
		}
	}
	cout<<ans;
	return 0;
}

标签:基中,int,序列,异或,线性,放入
From: https://www.cnblogs.com/z-2-we/p/17875991.html

相关文章

  • 线性代数的艺术
    推荐一本日本网友KenjiHiranabe写的《线性代数的艺术》。这本书是基于MIT大牛GilbertStrang教授的《每个人的线性代数》制作的。虽然《线性代数的艺术》这本书仅仅只有12页的内容,就把线性代数的重点全画完了,清晰明了。《线性代数的艺术》PDF版本:https://pan.quark.cn/s/a17b0......
  • CSS进阶3-transform 动画-渐变(线性渐变、镜像渐变)-关键帧
      1.动画介绍:改变盒子在平面内的形态(平移、缩放、旋转、倾斜)属性: 平移:transform:translate(值1,值2);(默认为X轴,translateY--下移) ——平移依然在原来文档流。  移动:transform:translate......
  • R:LEfSe(线性判别分析)
    rm(list=ls())#清空工作环境setwd("C:\\Users\\Administrator\\Desktop\\LDA")#设置工作目录library(tidyverse)#包含了一系列与数据分析和可视化相关的包library(microeco)#生态学分析的包library(magrittr)#提供了用于简化代码的管道操作符%>%feature_table<-read......
  • 线性基学习笔记
    我废话怎么这么多wwwwwwwwwww\(\color{white}地址\)rebuild思想就是使满足线性基的条件下,使每一个二进制位只在一个位置上为1。可以用高斯消元直接处理出,也可以处理出任意一组线性基后从后往前扫一遍,如果\(a_i\)第\(j\)位上为\(1\),则\(a_i\oplusa_j\toa_i\)。此时如果......
  • 再探欧式筛——一种泛用性更强的欧拉筛法/线性筛法实现
    一、引言欧式筛/欧拉筛法/线性筛法(EulerSieve)是一种能够在\(O(n)\)时间复杂度内,处理\([1,n]\)内质数的方法。其相比埃氏筛/埃拉托斯特尼筛法(EratosthenesSieve)的\(O(n\log\logn)\)时间复杂度,主要的优化在于欧式筛保证了所有正整数\(n\)均只被其最小质因数\({minp}_n......
  • 线性规划——Pyhton线性规划求解库PULP的使用
    PuLP是一个用于线性规划(LP)、整数线性规划(ILP)和混合整数线性规划(MILP)问题的Python库。PuLP的全称是"PythonforMathematicalProgramming",它提供了一个简单而强大的工具,使得用户能够定义优化问题、构建数学模型并使用不同的求解器进行求解。PuLP的主要特点之一是其易用性。它允许......
  • PC4084高耐压输入压差线性稳压器替代ME4084
    PC4084特性内置支持高压输入电流可调节的线性充电器:■最大输入24V电压,可承受高达28V的浪涌电压■恒流下最大充电电流可达500mA,支持外部电阻实时配置充电电流■兼容5VUSB功率源和AC适配器,并提供热插拔保护■支持4.2V/4.25V/4.3V/4.35V锂电池类型■预设4.2V±1%充......
  • PC1138低功耗低压差线性稳压器低纹波高效率保护性强
    ■产品概述PC1138系列是使用CMOS技术开发的高速、低压差,高精度输出电压,低消耗电流正电压型电压稳压器。由于内置有低通态电阻晶体管,因而压差低,能够获得较大的输出电流。为了使负载电流不超过输出晶体管的电流容量,内置了过载电流保护电路、短路保护电路。■用途移动电话无绳......
  • 线性代数的艺术
    推荐一本日本网友KenjiHiranabe写的《线性代数的艺术》。这本书是基于MIT大牛GilbertStrang教授的《每个人的线性代数》制作的。虽然《线性代数的艺术》这本书仅仅只有12页的内容,就把线性代数的重点全画完了,清晰明了。《线性代数的艺术》PDF版本:https://pan.quark.cn/s/a17b0......
  • 线性筛
    voidget_primes(intn){for(inti=2;i<=n;i++){if(!st[i])primes[cnt++]=i;for(intj=0;primes[j]<=n/i;j++){st[primes[j]*i]=true;if(i%primes[j]==0)break;}}}......