題目鏈結
題意:有n
nn個數和q
qq個詢問,每個詢問給出乙個正整數k
kk,問這n
nn個數異或組合出的所有數中第k
kk小的是什麼數,若不存在則輸出−1-1
−1。思路:
首先構建出這n
nn個數的異或線性基。
假設非零線性基共有tot
totto
t個,從小到大排列後,對於第x
xx個線性基,前1−(
x−1)
1-(x-1)
1−(x−1
)個線性基無論怎樣線性組合,其結果一定小於第x
xx個線性基。
因為第x
xx個線性基假設最高位的1
11在第k
kk位,因為異或不存在進製,故比它小的基無論怎麼組合都組合不出二進位制位大於等於k
kk的乙個111。
這樣的話,線性基的線性組合大小排序很類似於二進位制的大小排序,比如:
10000
10000
1000
0 一定比 01111
,01101
,01110
01111,01101,01110
01111,
0110
1,01
110等等形如0xx
xx
0***x
0xxx
x的二進位制數大。
故可考慮對k
kk二進位制分解,若其第i
ii位為1,則加上從小到大排序後第i
ii小的線性基的貢獻。
故對於tot
totto
t個線性基,線性組合的情況一共有2to
t−
12^ - 1
2tot−1
種。但這樣並沒有包括0
00的情況。
所以可以特判一下,若n
nn個向量全部都用來構成線性基,則不會存在異或後為0
00的情況。
故此題得解。
**:
#include#include#includeusing namespace std;
typedef long long ll;
const int a = 1e4 + 10;
ll a[a],b[110],c[a];
int n,zero,tot;
void init()}}
zero = (tot= (1ll<>i)&1) ans ^= c[i];
return ans;
}int main()
}return 0;
}
線性基 HDU3949 XOR 題解
給出 n n 個數,求選出的非空集合中異或和第 k role presentation k k小的異或和 異或和相同算一次 沒有 k k 個輸出 1 role presentation 1 1。如果構造線性基時將矩陣消成對角矩陣,得到的線性基就有乙個很棒的性質 最高位為 i i 的數至多只有乙個,且...
hdu 3949 XOR 線性基 第k小異或和
給定 n 個數,對其每乙個子集計算異或和,求第 k 小的異或和。先求得線性基。同上題,轉化為求其線性基的子集的第k小異或和。記 n 個數的線性基為向量組 b 有b i p i 1,p 1 lt p 2 lt lt p t 記 k 的二進位制表示為向量 vec 則第 k 小異或和為 oplus i 1...
HDU 3949 XOR 線性基 高斯消元
hdu 3949 xor hdu3949xor 搞死消元找到一組線性無關組 消出對角矩陣後 對於k二進位制拆分 對於每列只有有乙個1的,顯然可以用k的二進位制數直接異或得到第k大 對於一列由多個1的,由於二進位制性質,由於2的冪 1次方比2的 1到冪 的和要大,所以不影響大小 include inc...