f
f就取\
,每個整數都可以看作乙個向量,v
vv就取輸入的整數集合誘導出的向量集合。線性基本質上是一組基向量,只不過形式上我是用整數表示的。
用b
kb_k
bk表示最高位的1
11在第k
kk位的向量(整數)
對於乙個新加入的數p
pp(其實就是乙個向量),從最高位開始掃,發現當前位(第k
kk位)等於1
11時,如果b
kb_k
bk沒有,那就令bk←
pb_k\leftarrow p
bk←
p,並退出;否則p
pp^=bk
=b_k
=bk
,然後繼續下一位
如果要查詢某個數能通過基中的整數異或出來,可以貪心地從高位到低位填
#include
#define maxn 100010
#define cl(x) memset(x,0,sizeof(x))
using
namespace std;
typedef
long
long ll;
struct linearbasis
void
build
(ll *a, ll len)}}
bool
check
(ll x)
}lb;
ll read
(ll x=0)
ll a[maxn]
, x, y, n;
intmain()
xor序列 (線性基)
小a有n個數,他提出了乙個很有意思的問題 他想知道對於任意的x,y,能否將x與這n個數中的任意多個數異或任意多次後變為y 第一行為乙個整數n,表示元素個數 第二行一行包含n個整數,分別代表序列中的元素 第三行為乙個整數q,表示詢問次數 接下來q行,每行兩個數x,y,含義如題所示輸出q行,若x可以變換...
牛客180D xor序列(線性基求存在性)
小a有n個數,他提出了乙個很有意思的問題 他想知道對於任意的x,y,能否將x與這n個數中的任意多個數異或任意多次後變為y輸入描述 第一行為乙個整數n,表示元素個數 第二行一行包含n個整數,分別代表序列中的元素 第三行為乙個整數q,表示詢問次數 接下來q行,每行兩個數x,y,含義如題所示輸出描述 輸出...
牛客練習賽26 D xor序列(線性基)
link description problem statement小a有n個數,他提出了乙個很有意思的問題 他想知道對於任意的x,y,能否將x與這n個數中的任意多個數異或任意多次後變為y input第一行為乙個整數n,表示元素個數 第二行一行包含n個整數,分別代表序列中的元素 第三行為乙個整數q,...