雜題選做 Part 2

2022-05-13 07:01:35 字數 1304 閱讀 1027

考慮沒有數字相同的情況,這時不能加入比當前中位數小的值,否則肯定會使答案變小。

長度為奇數時,令$k$為大於當前中位數的最小值,則下乙個加進去的數要在$[mid+1,2*k-mid]$間。如果這之間已經有數,那麼直接填最大值。

長度為偶數時,如果$[mid+1,k]$之間已經有數填入,那麼直接填最大值,否則填$k$

然後擴充套件到正解。

加入小於等於中位數的沒有相同值可以用上述解法。

找到兩個相同的且盡量大的值(即不能超過最終中位數),把它們作為開頭,然後依次取大於小於的值使得中位數在這兩個值之間反覆橫跳,直到小於等於它的值被選完。

這時剩下的全是比它大的值,怎麼選都會比之前大,之前的條件就不用管了,而且不會再有小於中位數而且能反覆橫跳的數(都被取光了),所以直接執行演算法1

對cf那道樹上的構造題非常熟悉,也想到了對於每條邊看上界,但是偏偏就忘記了重心這個事情。

假如這是乙個哈密頓迴路,那麼每條邊都可以取到理論最大值——在邊兩端反覆橫跳經過它的最大值,證明可以把路徑拆分歸納證明。

而哈密頓路徑,就會少一條起點到終點的路徑的權值。

對於不是重心的點,它肯定有子樹大於$n/2$,所以它上手往那邊走,最終一定停在較大的那顆子樹中,路徑經過重心。

所以重心嚴格優於非重心。加入有兩個重心,那麼一定是它們之間的邊,否則可以停在任意乙個出點上——剩下的肯定能把這條邊消耗到最大,選出邊最小的即可。

延後操作,可以把題意轉化成:提取出一些數,這些數可以扔到左邊(代價b)或者右邊(代價a),可以隨意插入。

這種取$min$的路徑構造對於每乙個點入度出度考慮的題目也是at經典呢。

考慮每乙個點的入邊和出邊,假如這條邊選的是這個點的屬性,那麼就在這個點的前面或者後面加上這一條邊,最後的合法情況一定是:$n$個點連帶每個點所帶的邊,組合起來一定是乙個環。

所以有以下三種情況:全部選a,全部選b,至少有乙個點入邊出邊都有,剩下的邊選前$n-2$小的。

乙個d題就考乙個結論。

乙個字串的最長回文子串行就是這個子串和它反轉以後的串的最長公共子串行。

下面抽象地證明一下。

回文串肯定是lcs,現在只要證明不是回文串的公共串不是最優。

先首尾匹配直到兩個界互相越過,回文串就是接下來兩個指標依次匹配。

如果接下來還有不屬於回文串的匹配,那麼其中乙個必定會多越過至少乙個本已匹配的字母,否則它早先就被算進最長回文串了。

多加進去乙個又至少刪掉乙個,答案不會變優。

接下來直接$n^$dp即可。

補一波遠古題的題解。

本質上是要找到乙個更簡單的、等價的操作。

先把數列進行異或的字首和,目標是全部變成0,每一次操作相當於可以把乙個1向左或向右

雜題選做 8月

考慮設 f 表示為前 i 個點,有 j 個白色點的路徑條數為奇,有 k 個黑色點點的路徑條數為奇,總狀態下條數為 h 0 1 可以發現對於乙個 c 元集合選奇數個元素與偶數個元素方案數相等,均為 2 則列舉當前點顏色以及奇偶狀態可以發現只用記錄 j,k 是否為 0 則可以將 j,k 按照是否存在記錄...

程式設計練習 part2

一.題目 對於乙個給定的井字棋棋盤,請設計乙個高效演算法判斷當前玩家是否獲勝。給定乙個二維陣列board,代表當前棋盤,其中元素為1的代表是當前玩家的棋子,為0表示沒有棋子,為 1代表是對方玩家的棋子。測試樣例 1,0,1 1,1,1 1,1,0 返回 true 思路 對於井字棋的獲勝方式,有下面幾...

網路程式設計part2

五層協議 計算機1 計算機2 應用層 應用層 socket socket 傳輸層 段傳輸層 網路層包 網路層資料鏈路層 幀資料鏈路層 物理層 互動機 物理層 客戶端軟體send 服務端軟體recv 作業系統 作業系統 計算機硬體 物理介質 計算機硬體 客戶端軟體send 服務端軟體recv 作業系統...