線性基學習小記

2022-07-24 09:48:08 字數 1224 閱讀 9308

這玩意以前聽說過,然鵝一直木有學。

現在遇到題目要搞線性基了,然後就怒補了一番。

其實任何證明都不知道,(只會感性理解)就記記結論好了。

多項式全家桶一邊呆著去

首先學習過線性代數的同學可能對基這個概念比較了解。

好吧,其實基就可以理解成乙個座標系的x軸y軸之類的。

而線性基則在oi界中的定義大為不同,它的基不是向量,而是記錄的乙個數。

簡單理解線性基就是乙個新構造的陣列,然後這個陣列記錄的東東則是一些關於原陣列元素一些異或操作的結果。怎麼記錄則是要從它的構造來看它的性質,從而得到這些東東的值。

線性基的構造其實是每次插入乙個數更新線性基從而構造出來的,而這個陣列每一位記錄的元素為當前位的數。

那麼考慮現在的線性基是乙個陣列\(a[i]\),然後現在要插入乙個數\(x\)。有兩種情況:

所以就有**:(簡短清新)

void insert(long long x)

else

}if (x==0)

}}

有好多性質,就瞎列幾個:

線性基是滿足上述性質最小的集合。(這裡最小指集合大小)

線性基中隨意取出幾個數異或出來的結果都互不相同。

得到上面三個比較重要的性質之後,我們可以得到某些比較有用的結論了。

附上消去版線性基插入:

void insert(long long x)

else

for (int j=i+1;j<=62;j++)

break;

}} if (x==0)

}}

板子題luogu

#include #include #include #include using namespace std;

int n;

long long a[64],b[64],mi[64];

bool flag0;

void insert(long long x)

else

}if (x==0)

}}int main()

scanf("%d",&n);

for (int i=1;i<=n;i++)

long long ans=0;

for (int i=62;i>=0;i--) }

printf("%lld\n",ans);

}

線性基小記

線性基大概可以理解為對於一組數 a 1,a 2.a n 構造出乙個大小為 text left log 2 text right 的乙個陣列 p text 即為陣列 a 中數的值域 使得陣列 a 中的任意數都可以由陣列 p 中的數異或得出。在滿足此條件時,線性基的大小應該盡可能的小。陣列能通過陣列 a...

線性基學習

除了xor b不存在異或為0的結果外,xor a和xor b可以說是相等的。結果是相同的,但壓縮了空間,除此外線性基還有很多比較方便的性質。到題目裡細講 講的不是很嚴謹,大意是這樣。更詳細可以看這裡 線性基模板以及講解然後開始刷題。1.bzoj2460 題意 給n塊石頭,石頭有兩個屬性標號id和魔法...

線性基學習

線性基是乙個數的集合,並且每個序列都擁有至少乙個線性基,取線性基中若干個數異或起來可以得到原序列中的任何乙個數。原序列裡面的任意乙個數都可以由線性基裡面的一些數異或得到 線性基裡面的任意一些數異或起來都不能得到 0 線性基裡面的數的個數唯一,並且在保持性質一的前提下,數的個數是最少的 線性基中每個元...