此問題是從interviewstreet.com如何解決垂直棒挑戰?
採取鑑於整數數組Y = Y1,...,YN,我們有N線段,使得段的端點 我是(i,0)和(i,義)。想象一下,從每個段的頂部 水平射線被射到左側,並且這條射線接觸另一個段或它碰到y軸時停止。我們 構造了n個整數v1,...,vn的數組,其中vi等於 從段i的頂部射出的射線的長度。我們定義V(y1,...,yn) = v1 + ... + vn。例如,如果我們有Y = [3,2,5,3,3,4,1,2],那麼v1,...,v8 = [1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] ,3,1,2],如示於下圖:
對於每個排列p [1,...,N],我們可以計算V(YP1,..., ypn)。如果我們選擇[1,...,n]的一致隨機置換p,V(yp1,...,ypn)的期望值是什麼?
輸入格式
輸入的第一行包含一個整數T(1 < = T < = 100)。 T 測試用例如下。
每個測試用例的第一行是一個整數N(1 < = N < = 50)。 下一行包含以 單個空格(0 < yi < = 1000)分開的正整數y1,...,yN。
輸出格式
對於V的每個測試用例輸出的預期值(YP1,...,YPN),小數點後四捨五入 到兩位數。
採樣輸入
6 3 1 2 3 3 3 3 3 3 2 2 3 4 10 2 4 4 5 10 10 10 5 10 6 1 2 3 4 5 6
樣本輸出
4.33 3.00 4.00 6.00 5.80 11.15
說明
情況1:我們有V(1,2,3)= 1 + 2 +3 = 6,V(1,3,2)= 1 + 2 + 1 = 4,V(2,1,3)= 1 + 1 + 3 = 5 ,V(2,3,1)= 1 + 2 + 1 = 4,V(3,1,2)= 1 + 1 + 2 = 4,V(3,2,1)= 1 + 1 + 1 = 3.這些值的平均值是4.33。情況2:不管排列是什麼,V(yp1,yp2,yp3)= 1 + 1 + 1 = 3,所以答案是3.00。情況3:V(y1,y2,y3)= V(y2,y1,y3)= 5,V(y1,y3,y2)= V(y2,y3,y1)= 4,V y3,y1,y2)= V(y3,y2,y1)= 3,這些值的平均值爲4.00。
問題的天真解決方案將永遠運行N = 50。我相信問題可以通過獨立計算每個棒的值來解決。我仍然需要知道是否有任何其他有效的方法來解決這個問題。我們必須在什麼基礎上獨立計算每根棍子的價值?
謝謝您的回答中的值,你可以請更清楚我無法準確理解你的邏輯是什麼。 – 2012-04-06 08:56:51
我們試着爲每根棍子計數多少個perm atation,它的射線將完全是len。 – kilotaras 2012-04-06 15:49:03
Mebbe我錯過了一些數學背景,但你能告訴方法來計算單個棒的排列嗎? – 2012-10-05 15:00:41