首页 > 其他分享 >G64【模板】线性基 贪心法 P3812 最大异或和

G64【模板】线性基 贪心法 P3812 最大异或和

时间:2024-07-08 23:00:36浏览次数:12  
标签:int LL P3812 异或 ans 线性 include G64

视频链接:G64【模板】线性基 贪心法 P3812 最大异或和_哔哩哔哩_bilibili

 

 

 

P3812 【模板】线性基 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

// 线性基 O(63*n)
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

typedef long long LL;
int n;
LL p[64];

void insert(LL x){ //贪心法
  for(int i=63;i>=0;--i){
    if(x>>i&1){  //x第i位为1
      if(p[i]){  //已存在p[i]
        x^=p[i];
      }
      else{ //不存在p[i]
        p[i]=x; break;
      }
    }
  }
}
int main(){
  scanf("%d",&n);
  for(int i=0;i<n;i++){
    LL x; scanf("%lld",&x);
    insert(x);
  }
  LL ans=0;
  for(int i=63;i>=0;i--) ans=max(ans,ans^p[i]);
  printf("%lld\n",ans);
}

 

// 线性基 O(63*n)
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

typedef long long LL;
int n,k;
LL p[64];

void gauss(){ //高斯消元法
  for(int i=63;i>=0;i--){
    // 把当前第i位是1的数换上去
    for(int j=k;j<n;j++)
      if(p[j]>>i&1){swap(p[j],p[k]); break;}
    // 当前第i位所有向量都是0
    if((p[k]>>i&1)==0) continue;
    // 把其他数的第i位全部消为0
    for(int j=0;j<n;j++)
      if(j!=k&&(p[j]>>i&1)) p[j]^=p[k];
    // 基的个数+1
    k++; if(k==n) break;
  }
}
int main(){
  scanf("%d",&n);
  for(int i=0;i<n;i++)scanf("%lld",&p[i]);
  gauss();
  LL ans=0;
  for(int i=0;i<k;i++) ans^=p[i];
  printf("%lld\n",ans);
}

 

标签:int,LL,P3812,异或,ans,线性,include,G64
From: https://www.cnblogs.com/dx123/p/18284224

相关文章

  • DAY 1: C语言异或(^)以及按位与(&)的用法
    1.异或(^)的定义        在C语言中,异或操作符是^。异或操作符用于对两个操作数执行按位异或运算,即只有在两个操作数对应位不同时,结果为1。即相同为0不同为1。2.重要结论    1.任何一个数,假定为a,0^a等于a(不进位计算求和),a^a等于0。        2.异或运......
  • G63 线性基 异或和的方案数 P3857 [TJOI2008] 彩灯
    视频链接:G63线性基异或和的方案数P3857[TJOI2008]彩灯_哔哩哔哩_bilibili  P3857[TJOI2008]彩灯-洛谷|计算机科学教育新生态(luogu.com.cn)//线性基O(55*n)#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;#defineL......
  • 小B的异或
    描述小B收到了一串数字,其中包含n个数字。寄件人想知道这n个数的异或结果,但小B并不会求,就把这个问题转交给你。但他为了使你求得的更方便,于是运用魔法把这n个数都变成了 1 。现在,你需要求出这 n 个 1 异或后的结果。关于异或,下表为 a 与 b 的异或结果:aba⊕b1011......
  • Codeforces Round 950 (Div. 3)G. Yasya and the Mysterious Tree(字典树处理区间异或
    Problem-G-Codeforces存个字典树板子。1#include<bits/stdc++.h>23usingi64=longlong;45constexprintN=1E7;67inttrie[N][2];8intcnt[N][2];910inttot=0;11intnewNode(){12intx=++tot;13trie......
  • 【leetcode 找出第 K 大的异或坐标值]
    前缀和+最小堆importjava.util.PriorityQueue;classSolution{publicstaticvoidmain(String[]args){Solutionsolution=newSolution();solution.kthLargestValue(newint[][]{{5,2},{1,6}},4);}......
  • 【找出第 K 大的异或坐标值】python
    4层循环暴力超时 classSolution:defkthLargestValue(self,matrix:List[List[int]],k:int)->int:nums=[]forainrange(len(matrix)):forbinrange(len(matrix[0])):num=0foriinrange(......
  • 或、与、非、异或用途
    一、关键词**|(或)、&(与)、~(非)和^(异或)**符号描述运算规则&与两个位都为1时,结果才为1或或两个位都为0时,结果才为0^非两个位相同为0,相异为1~左移0变1,1变0<<左移各二进位全部左移若干位,高位丢弃,低位补0>>右移各二进位全部右移若干位,对无符号数......
  • F. 十六进制的异或
    原题链接题解1.异或规则为不进位加法,可以看作位运算2.查找的时间复杂度必不能高,\(log_{16}{10^{18}}·2e5\)2.所以,补齐前缀0,这样就能用字典树了code#include<bits/stdc++.h>usingnamespacestd;#definelllonglong//Trie数组的定义,大小为2000005*16,适应十六进制......
  • [ISITDTU 2019]EasyPHP RCE异或限制
    解决一个一直以来的问题,RCE的异或绕过问题。先了解下奇技淫巧吧-->https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html接下来说说今天的问题,在做异或问题是发现许多payload都是(xxxxx)^(%ff....),这都是怎么来的呢。现在说说吧,就比如拿'_'号来说,实质上异......
  • Acwing 143. 最大异或对
    题意:n个数,求任意两个数的最大异或值。思路:01前缀树总结:确定了处理01最大异或问题时,采用先bitset<32>(x).to_string()再插入和计算的方式。32位有符号整数的最大值应该是(1<<31)-1,而不是1<<32位,1<<32位代表这个1在第33位上。但是给bitset开的时候,要开到32位。此时最高位......