SRM 628

https://gist.github.com/lychees/568c58a47009028fb228

250. ShadowSculpture:

給定一個 6-連通的立體圖形(只有一個連通塊)的三視圖,求是否合法。

如果某個位置是 'N',那麼肯定從這個角度看過去都沒有圖形。
那麼假設其他位置都是磚塊,這樣可能導致圖形不連通,於是每次 dfs() 出一個連通塊,就判斷是否用這個連通塊就已經符合描述。

500. NarrowPassage2:

給了n(n <= 50)個數的數列,如果相鄰的兩個數 的和滿足 <= k, 這兩個數就可以交換。 問這個數列可以形成多少種不同的排列? 例如、{1,2,3}, k = 3 的話。。前兩個數可以交換,所以答案是2。。 而 {1,1,1,1,1},2 = 2 的話。。任何排列都是合法的。。所以是 5!。 每次刪除最小(或最大)的,計算貢獻並遞歸。