[POJ] 3258. River Hopscotch — amoshyc's CPsolution 1.0 documentation



[POJ] 3258. River Hopscotch — amoshyc's CPsolution 1.0 documentation

最小值最大化,標準的二分搜。 二分搜教學請參

判斷函式為:

bool C(int d) = 移除 M 個石頭後,可否能使相鄰石頭間的最短距離 >= d。 

該函式明顯有單調性,相鄰石頭間的最短距離 d 越小越容易達成。

這個函式可以用 Greedy 實作:

從左至右迭代「起點終點外」的每個石頭 rocks[i], 若該石頭與前一個石頭的距離 < d,我們必需移除該石頭,才能使相鄰石頭的距離 >= d。 我們計算總共有多少個石頭要移除,該個數必需 <= M。 

實作時,有兩點要注意:

1. 若 rocks[i - 1], rocks[i], rocks[i + 1] 中,rocks[i] 被移除了,    那 rocks[i + 1] 的前一顆石頭是 rocks[i - 1],而不是 rocks[i]。  2. 上述演算法沒考慮到終點與其前一個石頭。    設中間那 N 個石頭中,最後面的那個石頭為 rocks[-2],若與終點那石頭的距離 < d,    則要移除的是 rocks[-2],而不是終點的石頭,因為終點那個石頭是不能移除的。 

解的空間 [0, L]。 下界即為在還沒移除任何石頭前,相鄰石頭間最短距離,但要計算出此值還得多打一些程式碼, 而我們知道此值必大於 0,反正 C(0) = 1,所以可以直接將下界設為 0。 上界發生在 M = N 時,相鄰石頭間最短距離即為 L。

C(d) 在解的空間 [0, L] 上的分佈為:

... 1 1 1 0 0 0 0 ... 

我們的目標是求左邊數來的最後一個 1 在哪?

另外,存在全部都為 1 的情況,我們可以預判掉這情形。


Read full article from [POJ] 3258. River Hopscotch — amoshyc's CPsolution 1.0 documentation


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts