前言 ¶
難道 \(\rm Luogu\) 月賽也要變成 \(\text{Construction Force}\) 了嗎?對我這種雜碎來說真的很不友好誒= =.
接下來的題解全是口胡,沒有代碼驗證,如果思路有 \(\rm BUG\) 請務必聯系我,阿里嘎多!
T1「PMOI-4」人贏 ¶
最多只會有 \(81\) 種情況(因為出現 \(0\) 就真的是 \(0\) 了),找循環節就行了。
其實矩陣加速加擴展歐拉定理維護最終得到的數的 \(n,m\) 的指數也可以。並且這種方法較為通用.....
T2「PMOI-4」生成樹 ¶
對 \(w_i\) 奇偶分類,某一邊如果不能恰好分完,就把小的分到另外一邊去,說實話可能這道題比 \(\rm T1\) 還水......
T3「PMOI-4」可憐的團主 ¶
找出原樹的 \(\rm dfs\) 樹,顯然葉子之間不存在橫叉變,那么葉子構成獨立集,判斷該獨立集大小是否大於等於 \(\udiv{n}{3}\),如果是,那么顯然找到答案了,如果否,將葉子按照 \(\rm dfs\) 序排序,並在最后放入一個根,假設葉子有 \(m\) 個,那么現在我們得到一個大小 \(m+1\) 的集合,如果 \(2\nmid (m+1)\) 不能整除,則再放入一個根;
設我們最終得到集合大小為 \(M(2\mid M)\),對於這個集合,將第 \(i\) 個元素與 \(i+\frac{M}{2}\) 個元素匹配構成一條樹上路徑,這樣顯然可以將所有節點覆蓋到,證明如下:
對於葉子在每個點的分布情況進行討論:
- 當葉子全部分布在這個點的某個葉子的時候,這個點勢必會被某個葉子與根的路徑覆蓋,所以該方案,無論根是不是葉子,加入一個根節點是必要的;
- 當葉子分布在至少兩個兒子中時,由於是 \(i\) 與 \(i+mid\) 匹配,那么不論葉子是如何分布,這種匹配方式一定會存在某它子樹中的個葉子和它的匹配節點連成的路徑跨出該葉子所在子樹,這時該節點亦被覆蓋;
類似地,可以用這種方法說明除此構造方案以外,其他的方案都有反例(在某些情況下一些錯誤的構造方案或許可以使用 \(\tt random\_shuffle()\) 卡過去?)
由於構造輸出是 \(\mathcal O(n^2)\) 的,故復雜度就是 \(\mathcal O(n^2)\) 的咯......
T4「PMOI-4」猜排列 ¶
數據范圍給予我們十分重要的提示,先看第一組數據:
保證 \(n=4,m_1=4,m_2=1,m_3=4\).
先考慮如何解決該部分:
使用一次 \(2\) 詢問,得到 \(\ge 3\) 的數的下標,再使用至多三次 \(1\) 詢問(每次詢問)即可判斷每個數的具體位置。
這種方式啟示我們:如果要確定 \([1,n]\) 的數,我們可以通過先確定 \([1,\frac{n}{2}]\) 的數,進而確定 \((\frac{n}{2},n]\) 的數,這進一步啟示我們使用倍增,具體地:
- 先使用部分分一的做法確定 \([1,4]\);
- 確定 \((\frac{n}{2},n]\) 時,先使用一次 \(2\) 詢問,確定 \((\frac{n}{2},n]\) 的下標集合。
- 使用 \(\frac{n}{2}\) 將下標集合所有元素用 \(1\) 詢問做一次,確定 \(n\) 的位置;
- 使用 \(n\) 可以確定其他所有 \((\frac{n}{2},n)\) 的數的位置;
倍增,使用 \(\log_2n\) 次 \(2\) 詢問即可解決所有點。並且數據剛好,因為 \(\log_250000\approx 15.60964\),這真的是剛剛好啊= =.
T5「PMOI-4」排列變換 ¶
答案顯然為:
推導過程先留個 \(\rm issue\).