線性基練習題


線性基練習題

前言

一個題單沒做完的我有開了另一個

剛學嘛 刷了一部分的題 整理一下

照着這個默認排序的題單刷的(然后不會的就跳了)


題目

1. P3812 【模板】線性基

模板題

沒什么好說的


代碼


2. P3265 裝備購買

這個也算是模板題???

這模板題做的真是心累

這啥啊? 整數線性基? 高斯消元?

於是跑去學了一下高斯消元(然后現在還是不會寫


如果一件物品 \(i\) 可以用前面的物品湊出來 有

\[\sum_{j = 1}^{i - 1} k_j \times a_{j, 1} = a_{i, 1}\\ \sum_{j = 1}^{i - 1} k_j \times a_{j, 2} = a_{i, 2}\\ ... \\ \sum_{j = 1}^{i - 1} k_j \times a_{j, m} = a_{i, m}\]

這玩意兒需要通過高斯消元來解 也可以結合線性基來求

至於價值 可以直接貪


代碼


3. P4301 新Nim游戲

做的時候推了半天結論推出來了 但是沒推出到底怎么着不合法...

推潮了去看題解

哦 原來一定合法...


考慮原來的游戲 當所有的石子堆數量異或起來不為 \(0\) 的時候為先手必勝

所以我們只需要通過第一輪的操作使對方無論如何操作都無法使得剩余的石子堆中石子數量異或起來為 \(0\) 就行了

考慮對石子數量構造線性基 由於線性基中的數異或起來都是不為 \(0\) 的 所以我們只需要將線性基以外的數都取走就可以了

使得取的石子最少 直接貪就好了


代碼


4. P4570 元素

題目翻譯成人話大概就是找序列的線性基 求最大價值

線性基中元素的數量是唯一的 直接貪就好了


代碼


5. P5556 聖劍護符

兩子集屬性值相同 相當於 若干個數異或起來是否能得到另一個數

構造線性基 如果這些數不能全部插進去 那么就是存在的

而根據數據范圍 最多只能插入 \(31\) 個數 如果點數多於 \(31\) 那么必然存在 否則直接對於這些點暴力構造線性基即可

鏈的維護直接上樹剖就可以


代碼


6. P4151 最大XOR和路徑

同一條邊經過兩次相當於沒走 那么我們就可以通過一條邊到達一個環 嘗試累加環上的貢獻之后 再通過這條邊出來

也就是說所有的環的異或和都是可以直接用的 而不需要關系到這個環的邊上的權值

問題相當於找一條鏈 使用給定的若干數進行異或 求最大值

異或最大值顯然是可以直接構造線性基來搞的

那么這條鏈怎么找

兩種情況

要么兩點之間只有一條鏈 那么就不用選了 直接拿來用就好了

或者兩點之間有多條鏈 那么對於其中的任意一條鏈 其必然存在於一個環中 那么當這條鏈異或上其所在的那個環 得到的就是這個環上的另一部分 也就是另一條鏈

所以這條鏈完全可以任意選 取異或最大值即可


代碼


7. CF845G Shortest Path Problem?

雙倍經驗 就是把最大換成最小


代碼


8. P3292 幸運數字

倍增 點分治 什么的感覺都好麻煩... 而且沒寫過

所以果斷樹剖 然后帶着四個 \(\log\) 吸氧硬卡過去


線性基可以合並 直接將一個往另一個里面插就好了

樹剖 + 線段樹 + 線性基


寫完跑一下樣例 誒 過了

  1. 直接扔上去 然后只有六十分 \(T\) 了四個點

  2. 吸上一口氧氣 變成了九十分 最后一個點超時了 \(0.05\)

  3. 去掉 \(define\ int\ long\ long\) 改成自己開 然后還是九十分

  4. 能加 \(inline\) 的都加上 仍舊是九十分 最后一個點超時

  5. 能加 $register $ 的都加上 仍舊是九十分 最后一個點超時

  6. 看了一下 點數只有兩萬 把這一類的數組改成 \(short\) 吸氧碾了過去


代碼


9. CF895C Square Subsets

又是一道很仙的題

狀壓 \(dp\) 的做法不會 所以還是線性基吧

困死了 先不寫了...

剛剛一不小心又睡着了.../kk


第二天跑過來繼續補

做的時候根本看不出這東西和線性基有毛線的關系...


一個完全平方數分解質因數后每個質因子出現的次數都為偶數次

所以只有乘積的質因子出現次數的奇偶性是有貢獻的

小於等於 \(70\) 的質因數就只有十九個 可以壓一下 那么兩個數相乘就相當於表示因子的兩個二進制數異或 而能夠異或出 \(0\) 則其所有的質因數出現偶數次 也就是可以得到完全平方數

顯然對於所有不能插入線性基的數一定是能異或出 \(0\) 的 若設線性基中有 \(cnt\) 個數 對於所有的其他數 其子集一定可以被線性基中的數異或出來

也就是除了線性基中的數 外面的數可以隨便取

\(ans = 2^{n - cnt} - 1\)


代碼



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM