二次联通门 : LibreOJ #114. k 大异或和

/*
LibreOJ #114. k 大异或和 WA了很多遍
为什么呢。。。 一开始读入原数的时候写的是for(;N--;)
而重新构造线性基的时候要用到N。。。所以GG 对于找第k大异或和
只需把原来的线性基重新构造
构造规则为
若i<j, aj的第j位是1,就把aj异或上ai 查询的时候将k二进制拆分,对于1的位,就异或上对应的线性基。
最终得出的答案就是k小值。
*/
#include <cstring>
#include <cstdio> inline void read (long long &now)
{
register char word = getchar ();
bool temp = false;
for (now = ; word < '' || word > ''; word = getchar ())
if (word == '-')
temp = true;
for (; word >= '' && word <= ''; now = now * + word - '', word = getchar ());
if (temp)
now = -now;
} long long N, M; class Linear_Base_Type
{
static const int _L = ; private : long long number[_L + ];
long long data[_L + ]; int Count; public : Linear_Base_Type ()
{
memset (data, , sizeof data);
memset (number, , sizeof number);
Count = ;
} inline void Insert (register long long key)
{
for (register int i = _L; i >= ; i --)
if (key & (1LL << i))
{
if (number[i] == )
{
number[i] = key;
break;
}
key ^= number[i];
}
return ;
} void Re_Build ()
{
for (register int i = , j; i <= _L; i ++)
for (j = ; j < i; j ++)
if ((1LL << j) & number[i])
number[i] ^= number[j]; for (register int i = ; i <= _L; i ++)
if (number[i])
data[Count ++] = number[i];
} inline long long Query_kth (register long long k)
{
long long res = ; if (Count != N)
-- k;
if (k >= (1LL << Count))
return -; for (register int i = ; i <= _L; i ++)
if (k & (1LL << i))
res ^= data[i]; return res;
}
}; Linear_Base_Type Make; int main (int argc, char *argv[])
{
long long x;
read (N); for (int i = ; i <= N; i ++)
{
read (x); Make.Insert (x);
}
read (M);
for (Make.Re_Build (); M --; )
{
read (x); printf ("%lld\n", Make.Query_kth (x));
}
return ;
}

LibreOJ #114. k 大异或和的更多相关文章

  1. Loj 114 k大异或和

    Loj 114 k大异或和 构造线性基时有所变化.试图构造一个线性基,使得从高到低位走,异或上一个非 \(0\) 的数,总能变大. 构造时让任意两个 \(bas\) 上有值的 \(i,j\) ,满足 ...

  2. [LOJ#114]k 大异或和

    [LOJ#114]k 大异或和 试题描述 这是一道模板题. 给由 n 个数组成的一个可重集 S,每次给定一个数 k,求一个集合 T⊆S,使得集合 T 在 S 的所有非空子集的不同的异或和中,其异或和  ...

  3. LOJ.114.K大异或和(线性基)

    题目链接 如何求线性基中第K小的异或和?好像不太好做. 如果我们在线性基内部Xor一下,使得从高到低位枚举时,选base[i]一定比不选base[i]大(存在base[i]). 这可以重构一下线性基, ...

  4. 【线性基】51nod1312 最大异或和&LOJ114 k大异或和

    1312 最大异或和 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 320 难度:7级算法题   有一个正整数数组S,S中有N个元素,这些元素分别是S[0] ...

  5. 第k大异或值

    这道题与2018年十二省联考中的异或粽子很相像,可以算作一个简易版: 因为这不需要可持久化: 也就是说求任意两个数异或起来的第k大值: 首先把所有数放进trie里. 然后二分答案,枚举每个数,相应地在 ...

  6. LOJ114 k大异或和

    传送门 (vjudge和hdu也有但是我觉得LOJ好看!而且限制少!) 不过本题描述有误,应该是k小. 首先我们需要对线性基进行改造.需要把每一位改造成为,包含最高位的能异或出来的最小的数. 为啥呢? ...

  7. 【loj114】k大异或和 线性基+特判

    题目描述 给由 $n​$ 个数组成的一个可重集 $S​$ ,每次给定一个数 $k​$ ,求一个集合 $T⊆S​$ ,使得集合 $T​$ 在 $S​$ 的所有非空子集的不同的异或和中,其异或和 $T_1 ...

  8. hdu 3949 第k大异或组合

    题意: 给你一些数,其中任选一些数(大于等于一个),那么他们有一个异或和. 求所有这样的异或和的第k小. 我们可以将每一位看成一维,然后就是给我们n个60维的向量,求它们线性组合后得到的向量空间中,第 ...

  9. 1738. 找出第 K 大的异或坐标值

    2021-05-19 LeetCode每日一题 链接:https://leetcode-cn.com/problems/find-kth-largest-xor-coordinate-value/ 标 ...

随机推荐

  1. 在JAVA中如何获取当前源文件名以及代码的行号

    在最近经历中,遇见了这样一个问题,如何获取当前源文件名以及代码的行号,只是了解到C语言有预定义宏__FILE__.__LINE__,它们在预处理的时候都已经确定好了,但是在JAVA中应该怎么获取输出呢 ...

  2. (二)Struts.xml文件详解

    一.Struts.xml文件 Struts.xml文件构成 如图,<Struts>标签内共有5个子标签. 1.1 struts-default.xml 查看Struts的内容可知,Stru ...

  3. 本地虚拟机NAT模式下怎么设置才可以访问外网

    记:因为我要在本机虚拟机上安装Docker,结果发现虚拟机环境不能上网,是主机模式.我要调成net模式下才可以访问外网,这就需要怎么设置.下面文章记录一下. 在本机安装VMware软件后,系统中会自动 ...

  4. IE浏览器 Table 兼容问题

    border篇: 直接在<tr>标签上添加 border-bottom:1px solid red;  在IE8以上浏览器有效,IE7以下版本无效   解决方案:需给<table&g ...

  5. js对象 c#对象转换

    前台页面 js 创建对象 let t = {}; 数组对象 let c = []; c.push({}) ;// 添加对象 以string格式 传递 JSON JSON.stringify(c); c ...

  6. SQL Server 2017命令创建新账户(test-user),并分配数据库权限

    -- 1. 创建登录账号USE [master];GOCREATE LOGIN [test-user] WITH PASSWORD = 'xysu7SZ193SNX6E{{HxubPE3}vr',DE ...

  7. 用户注册&单点登录

    package com.tttttt.portal.controller; import java.util.HashMap; import java.util.Map; import javax.s ...

  8. JavaScript Drum kit

    用 JavaScript 实现网页鼓乐器,相关的初始代码在 JavaScript30 官网和 GitHub 上已经存在.我把 sound 文件夹下的音频全部替换掉了,一些相关解释也直接在注释中标明. ...

  9. 页面中的div居中

    div的居中 一.页面的水平居中 #article{ position: relative; margin: 0 auto; width: 80%; background-color: aquamar ...

  10. sql基础的基础

    一.数据定义语言(DDL) create table alter table drop table create index alter index drop index create view dr ...