文文殿下 Teleporters 傳送器 題解

2022-05-19 05:32:52 字數 1012 閱讀 4349

乙個結論:「從出發點開始走絕對不會出現死迴圈」。

考慮如何證明這個結論(這會直接提示正解):

我們對數軸分段,對於任意乙個傳送門,把當前段分成兩段。

對於每一段(除了第一段)我們總會有乙個到達這個段的方法:走乙個傳送門。這個傳送門的位置是這個段左邊第乙個傳送門,我們檢視這個傳送門通向**,然後把那個點與這個點連一條有向邊。

對於每一段(除了最後一段)我們總會有乙個離開這個段的方法,和上面類似建圖。

我們考慮,我們在行走過程中,由於第乙個段沒有入度,所以我們絕對不會回到第乙個段。

由於最後乙個段沒有出度,所以我們絕對不會向其他地方迴圈。

由於除了開頭和結尾的特殊段,其他任何段有且僅有乙個入度和出度,所以我們一定會從一號段到達最後乙個段離開。

證畢。我們發現,除了從一號點到最後乙個點是一條簡單路徑,其他的點一定在乙個環裡(可以畫圖理解)。

考慮我們新加乙個傳送門,會導致這張有向圖如何變化?

我們有三種加的方式:

題解顯而易見,我們把所有環從大到小排序。

然後從大到小,用傳送門把他們用方法一連到我們的路徑裡。

如果連完以後,傳送門還有剩餘,我們可以不斷做方法三和方法一,把他們累加到答案裡。

細節:如果只剩乙個傳送門,我們就把他加在末尾。

時間複雜度\(o(nlogn)\)

進一步優化:

我們發現複雜度瓶頸在於排序,但是由於排序的值非常小,我們使用桶排序。

時間複雜度到達理論下屆:\(o(n)\)

但是我懶得寫線性的,下面給出\(o(nlogn)\)的**,吸氧能過。

#includeusing namespace std;

const int maxn = 2e6+10;

struct qwq s[maxn];

struct qqq l[maxn];

struct qaq

if(m)

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

return 0;

}

文文殿下 快速傅利葉變換 FFT 學習筆記

形如 a x sum a i x i 的式子稱為多項式。我們把 n 稱為該多項式的次數界。顯然,乙個 n 1 次多項式的次數界為 n 設 a x 和 b x 為多項式,且次數界分別為 n m 則有 a x sum a i x i b x sum b i x i 他們遵循下面的常用運算法則 a x b...

文文殿下 51nod1469 淋漓盡致子串

sam的經典應用 乙個狀態的size 1絕對不合法。乙個狀態在parent樹上有乙個size 1的後繼絕對不合法 前面可以再補字元 乙個狀態可以轉移到size 1的節點絕對不合法,因為可以在後面補字元。include include includetypedef long long ll const...

Pentaho bi 中文文件

目錄 building and debugging pentaho with eclipse zh cn 1.5.4 getting started with the bi platform zh cn 1.5.4 pentaho building components 1.5.4 pentaho ...