HDU 3949 異或線性基

2021-08-07 21:26:17 字數 1323 閱讀 4844

題目鏈結

題意:有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...