構造做題筆記

rlc202204發表於2024-07-31

UOJ460 新年的拯救計劃

\(n\) 點完全圖。選出儘量多生成樹。輸出方案。 \(n\le1000\)

考慮上界,總共有 \(\frac{n(n-1)}{2}\) 條邊,也就是最多可以分成 \(\frac{n}{2}\) 棵樹。

嘗試證明這個上界可以達到。我們考慮歸納法,假設 \(n = 2k\) 可行。

考慮 \(2k + 1\),我們可以將每棵生成樹選一個不同的點連向 \(2k + 1\),考慮到只有 \(k\) 棵,顯然是夠的。

考慮 \(2k + 2\),由 \(1 \sim k\) 連向 \(2k + 1\)\(k + 1 \sim 2k\) 連向 \(2k + 2\),然後再加一棵生成樹,由 \(1 \sim k\) 連向 \(2k + 2\)\(k + 1 \sim 2k\) 連向 \(2k + 1\),同時連 \(2k + 1\)\(2k + 2\)

這是一個構造的方法。這題就完了。

CF1558C Bottom-Tier Reversals

首先觀察性質:位置的奇偶性不會改變,所以如果一開始奇偶性就錯了肯定不行。

接著我們需要確定一個大體思路,如何做排序?由於是對字首操作,我們考慮倒著往前一步步還原。

所以我們現在先考慮如何把最後兩個變成 \(n - 1, n\),觀察最終的長度約束,如果我們能在 5 步內完成,那麼這個問題就解決了。

第一步:找到 \(n\),使其變成第一個。

第二步:找到 \(n-1\),使 \(n\) 變成 \(n-1\) 前面的元素。

第三步:翻轉使得 \(n-1\) 第二個,\(n\) 第三個。

第四步:翻轉使得 \(n\) 第一個,\(n-1\) 第二個。

第五步:翻轉使得 \(n\) 最後,\(n-1\) 倒數第二。

然後就順利解決了這道題。

P6892 [ICPC2014 WF] Baggage

神仙構造。

首先看到這種題肯定是要手玩小資料並且猜下界,根據樣例不難猜出下界是 \(n\)

證明下界分兩步,首先是證明不存在更小的,其次是構造一個。

我們先考慮證明不存在更小的,觀察題目的性質發現,如果我們記相鄰兩個位置相同的個數為 \(\phi\),則我們從 \(0 \to 2n-1\),由於每次最多新增兩個且第一次最多新增一個,所以至少 \(n\) 次。

根據這個,我們可以手玩出 \(n = 4\) 的情況:

\[..BABABABA\\ ABBABAB..A\\ ABBA..BBAA\\ A..ABBBBAA\\ AAAABBBB..\\ \]

進一步,我們嘗試去歸納 \(n\) 更大的情況,我們發現可以這樣做:

\[..BABA [(n-4) \times BA] BABA\\ ABBABA [(n-4) \times BA] B..A\\ ABBA.. [(n-4) \times BA] BBAA\\ ABBA[(n-4) \times A + (n-4)\times B]..BBAA\\ A..A[(n-4) \times A + (n-4)\times B]BBBBAA\\ AAAA[(n-4) \times A + (n-4)\times B]BBBB..\\ \]

剛好 \(n\) 次,但是這裡要求存在使得只往前移兩位的方法,所以 \(n-4 \ge 4\),意味著我們需要自己手玩 \(n = 3,4,5,6,7\) 的情況。