前往
大廳
主題

ZeroJudge - f339: 下雪的日子(Snow) 解題心得

Not In My Back Yard | 2020-11-19 00:02:32 | 巴幣 0 | 人氣 251

題目連結:


題目大意:
第一列給定兩正整數 N 、M (1 ≦ N ≦ 20 , 1 ≦ M ≦ N),代表道路的長度(道路會分成開頭的 0 、結尾的 N 以及中間的 1 ~ N - 1 這 N + 1 個點)且已知有 M 個道路區間沒有覆蓋著雪(可能有重複到的路段)。

接著有 M 列,每列給定兩非負整數 S 、 E (0 ≦ S ≦ E ≦ N),代表 [S, E] 這個區間(即點 S 到點 E)是暢通無阻的。

根據這 M 個暢通的區間,請找到那些沒有暢通的路段區間。如果有多個區間,則從起始點(即上面的區間之「S」所扮演的角色)最小的開始輸出。



範例輸入:
範例輸入 #1
7 5
0 1
1 3
4 5
5 6
6 7

範例輸入 #2
5 2
0 1
3 4

範例輸入 #3
10 4
1 2
3 4
5 6
7 8

範例輸入 #4
6 3
3 5
1 4
5 6


範例輸出:
範例輸出 #1
3 4

範例輸出 #2
1 3
4 5

範例輸出 #3
0 1
2 3
4 5
6 7
8 10

範例輸出 #4
0 1


解題思維:
因為例如已知 [1, 2] 、 [3, 4] 是暢通,而這並不代表 [2, 3] 是暢通的,所以我們應該要知道的資訊是每兩個點「之間」的路段是否暢通(而不是儲存每個點的「暢通」,可以看到不適用於這個例子)。

我們可以將 [0, 1] 定為第 0 條路段、[1, 2] 為第 1 條路段、……以此類推。

因為 N 值很小,所以可以對於每個區間 [S, E] 將第 S 條 ~ 第 E - 1 條路段都設為暢通的。做完 M 次之後掃過一次每一個路段。

每找到一個非暢通路段(假設現在是第 i 條路段)就繼續看可以延續到哪個路線(假設第 j 條路段才是暢通的),則輸出 i 以及 j 。全部找完之後即是所求。



不過如果 N 、 M 的值如果很大,上面的作法很沒有效率。此時可以利用類似於這題的想法去將沒有暢通的區間找出來。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作