Problem
機場有一個長形走廊,其中南側是搭機處,北側是下機處。
給予很多城市間旅客的數量,從城市 A 到城市 B 的旅客 X 人會在這個機場上進行轉換。
現在讀入機場的放置口設定 (順序),請問每一種設定所產生的負載為何?
Sample Input
|
|
Sample Output
|
|
Solution
沒有要求最佳化,模擬即可。
|
|
機場有一個長形走廊,其中南側是搭機處,北側是下機處。
給予很多城市間旅客的數量,從城市 A 到城市 B 的旅客 X 人會在這個機場上進行轉換。
現在讀入機場的放置口設定 (順序),請問每一種設定所產生的負載為何?
|
|
|
|
沒有要求最佳化,模擬即可。
|
|
「其實雙親不准我在家裡畫漫畫。」
「是嗎?你都畫些什麼啊」
「乃是在下 x 大哥的原創本是也。」
「還有,薰是普通人」
「薰姐,功的反義詞是什麼?」
「什麼?是守嗎?」
「薰姐,剛才我說的話請你全忘記吧。」
在一個 N 個城市的國家,每個城市之間用 M 條邊相連。隨著時間,它們開始分裂,彼此會開始斷訊,無法聯絡到相鄰的城市。定時回報某個城市可以藉由間接或直接連絡的城市個數。
操作:
|
|
|
|
|
公私領域的分裂,在不同的場合下,擁有的心理、情緒反應會有所不同。在某些場合 渴望愉悅 是必要的行為,抑制住反而有失禮儀。相反地, 否認愉悅 也是有場合是必須的。例如在家裡與在社交場所,在家裡可以因為有家人關係,表現得自然不過,如果什麼都抑制住,反而稱不上家人相處。而在社交場所,即使討厭一個人,也不能在臉上表現出來。
比中指 辱罵別人其實是很文明的舉止,因為並沒有實施暴力行為,是一種克制自我的行為。然而,比中指仍然稱不上是好的禮儀,但已經進步很多。
裸體代表的就是 自然 、 本相 ,查看其背後的涵義,這在很多理論上作為依據-抗議的主旨。 求自然 、 求真相 。
關於小組報告的大綱如下:
特別注意報告要點:
無處不在的文明教育(家庭、學校、公共空間與媒體)
談什麼?不談什麼?
首先是性教育、生與死,小時候不談這些,但隨著長大成人就會依依序序跟家裡長輩們談談,關於性、生後事 … 等一些比較嚴肅的話題。
看不看 A 片?寫不寫遺書?A 片的命名如何文明化?
PTT A片取什麼名字最安全?
大陸尋奇、舌尖上的日本、微積分、幫爸爸抓的、流體力學、日文初級音聽檢定 … 等
最後老師特別贊助:取名為 文明的進程 。
環保意識的培養?
其實我認為學校文明教育從蔣公那時開始到現在就很有不同,學三民主義的課程到現在九年一貫課程,中間經歷了相當多的轉變。老一輩的人三民主義的日子,學著書上的精神,造就他們的價值觀。而我們學習到的只有宏觀歷史,而少了點歷史仇視,沒有嚮往開國元老,敬重政治人物的努力。
小學從品德教育開始,在國中之後便不怎麼有時間上這些,原本有 課 上,變成用條例規範,逐漸地,我們可以開始閱讀 規則 並且知道要遵守。
媒體很有趣,從小看到大,可以說是一個群體訓練場,看著畫面猜著下面給的標題是否符合,已經快要變成一場遊戲,只要八九不離十,就有十足把握出門跟別人談談這些。在一個單向的管道中,從媒體為何而來?人們疏離開始說起,又或者不想跟別人談這個主題,需要一個媒介替你轉達!
找到迴文是起頭和結尾都是字符 c,並且 c 在中間出現 X 次
參考範例輸入,六個詢問 (a, 2) (b, 2) (c, 2) … 他把字符弄再一起,例如第一個 (a, 2) 來說,起頭為 a 且中間要出現恰好 2 次 a,主字串中只看到 abccba 和 aa。
|
|
|
|
因為要恰好 X 個,對於每組詢問基本上只會有 n 個位置,當作起頭,然後 O(1) 檢查迴文即可。就算分 26 組下去,還是 TLE。
O(1) 檢查的方式按照 manacher’s algorithm 的做法,
manacher’s algorithm 算法核心,在 O(n) 時間內找到最長迴文子字串。
圖片與算法來源 here
可以將每組詢問壓到 O(log n) 以下,我們知道從每一個中心展開的最長迴文,也代表可以記錄展開的時候,恰好以某個字符開頭的最大總數。
對於每一組詢問,保證每一個中心最多當過一次迴文中心,因此只要總數大於等於指定個數,保證可以湊出來。
其 A[i][c]
表示以位置 i 為中心,起頭是字符 c,出現最多的 c 個數。之後問 c x 輸出有多少 A[i][c] >= x
。
|
|
在一個 L x W 的區域中,有 N 個點障礙物,要在其中找到一個最大空白矩形,中間不包含任何障礙物。
|
|
|
|
x, y 軸兩個都要做嘗試基底的動作。考慮一下都是 x = ? 當做基底時, 如果 y 值與窮舉點一樣, 那麼可選上或選下, 但無法決定哪個好,但是可以被決定於 y = ? 當做基底時的窮舉。整體效率是 O(n*n)
|
|
給 N 個點、M 條邊的無向圖,現在有三種操作:
|
|
|
|
可以看出,如果順著做會比較繁瑣,分裂總是比合併來的痛苦,根據并查集的概念,將其變成合併操作。
我們逆著輸入順序處理,根據離線的方式,可以預測最後會分裂到甚麼情況、最後某個節點帶什麼權重,分別將其建造一個平衡樹。刪除一條邊相當於加入一條邊,并查集看出好比兩個平衡樹合併,修改一個節點權重相當於回朔前一個版本的值。
而要在平衡樹中查找第 k 大元素不能用 STL,這裡用比較簡單的 treap,編程複雜度比較低。
treap 的效率取決於每個節點攜帶的隨機權重,事先用內存池撒過一次亂數,之後需要再從內存池提取,之後就不撒亂數,蛋疼的是竟然活生生掛掉了。還是乖乖 srand(514); 偷懶不想用 new 加快效率什麼的,實在囧
|
|
機器人一開始在原點 (0, 0),並且面向東方 (East)。會按照以下三種指令做事。
指令中會有 ?
表示可以插入三種其中一種操作,請問機器人分別能走到的 x, y 最大最小值為何。
|
|
|
|
動態規劃,把 x, y 分開考慮,同時維護 4 個方向的最大最小值。
定義 dp[i][dir][min/max] : 執行前 i 個指令,在 dir 方向上的最大最小值。
遞迴公式請參照代碼。
|
|
某 M 「給一個字串 S,接著詢問操作 [l, r]
告訴區間內是否剛好為一個迴文?」
學弟 「用最長迴文的方式去想嗎?」
某 M 「我沒有標準答案哦 wwww,吾等還在想能不能離線 O(1)。」
暗自敲著 UVa 另外一題類似題說著,就算能 O(1) 檢查迴文,區間還是要窮舉 O(n),在此宣告某 M 陣亡- Time Limit 。
某 M 心想,假解也是不錯選擇,單純詢問迴文肯定會被 manacher’s algorithm 秒掉 (O(1) - O(n))。如果詢問 [l, r]
的子字串是否符合 pattern AA (例如 abcabc
,其中 A = abc
),也會被 suffix array、suffix tree 解決 (O(log n) - O(n log n)/O(n))。
百般無奈之下,也許這題就這樣定好了:
C p x
:將字串位置 p 修改成字符 x。Q p q
:求子字串 S.substr(p) 和 S.substr(q) 的最長共同前綴長度。
|
|
|
|
|
|
|
|
題目有三種字符串的操作:
由於怕離線處理,因此輸入的數值會進行加密,加密的原則-每個數字會增加數值 d,其 d 為當前打印字符 c
的個數。
|
|
|
|
代碼算法詳見 《可持久化數據結構研究》杭州外國語學校-陳立杰 那篇所寫的 Treap(樹堆)。
這題的離線作法是預先紀錄需要的版本號位置,在邊處理的時候隨時保存答案,以免造成記憶體過大儲存。既然他進行了加密,可見我們不能把每一個版本號的字串儲存,這就是其麻煩之處。
接下來說明的作法,是將每個字符當作節點,在一個二元搜尋樹上,利用中序走訪的結果表示一個字串。
Treap 主要概念是平衡樹,也就是儲存有序的結構,支持插入、刪除、查找數字。冠上可持久化平衡樹,就是一個維護歷史版本的平衡樹。
Treap 每一個節點具有 <key, value>
,仍然是一個二元搜尋樹,但同時也是一個 heap。單純看 key 呈現一個二元搜尋樹,如果看 value 則會是 heap。key 跟 value 是挺像的,我的代碼誤打了名稱。而 Treap 效率完全取決於隨機決定的 value 值進行平衡調整。
對於可持久化 Treap 而言,是一個具有平衡樹特性,但不需要做任何旋轉操作的樹。每一次將修改操作替代為一個增加節點的方式 ( 用增加替代修改 的精神),在記憶體耗量就是 O(m log n)
,m 是其操作,log n 是樹內結構的期望深度。每一次操作期望只修改 log n 個節點。
這裡只會講到可持久化,拆分成兩個操作,而原本的插入、刪除、查找都可以利用這兩個操作完成。
$$\text{ treap merge(treap a, treap b) } \\ < \text{treap, treap} > \text{ split(treap a, int n) }$$插入一個元素相當於 split 一次,將兩個部分中間放置一個元素後,依序將其 merge 起來。
刪除一個元素相當於 split 兩次,將中間單一元素的 Treap 忽略,將第一和第三部分的 Treap merge 起來。
在 g++ 头文件中,
<ext/rope>
中有成型的块状链表,在using namespace __gnu_
cxx; 空间中,其操作十分方便。
不用手刻,而且歷史版本的儲存速度也是 O(1)
,裡面應該進行了很多記憶體控管。沒有細讀過,但是其支持相當厲害。看到這一篇代碼被不到百行的流程搞定。不過塊狀鏈表的複雜度仍然是 $O(n^{1.5})$,比起隨機的可持久化 treap 還是慢了些。
|
|
給一張圖,點與點之間有條有向路徑,每條路徑上有兩個權重,第一次從起點到終點經過這條邊時,消耗 d,而如果在第二次經過時,將消耗 d + a。保證 d <= d+a。(第二次經過同一條邊時,困難度會增加。)
求兩條從起點到終點的路徑花費最小。
|
|
|
|
直接套用最少費用流,對於輸入給定的一條邊 u->v,增加兩條容量為 1,路徑花費分別為 d 和 d+a,求起點到終點流量 = 2 的最少費用。
|
|