この問題は、interviewstreet.comからの引用です。
整数の配列 Y=y1,...,yn が与えられると、線分 i の端点が (i, 0) と (i, yi) となるような n 個の線分があります。各セグメントの上から水平光線が左に発射され、この光線が別のセグメントに触れるか、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,3,1, 2]、下の図に示すように:
[1,...,n] の順列 p ごとに、V(yp1, ..., ypn) を計算できます。[1,...,n] の一様ランダム順列 p を選択すると、V(yp1, ..., ypn) の期待値はいくらになるでしょうか?
入力フォーマット
入力の最初の行には、単一の整数 T (1 <= T <= 100) が含まれます。T テスト ケースが続きます。
各テストケースの最初の行は、単一の整数 N (1 <= N <= 50) です。次の行には、1 つのスペースで区切られた正の整数 y1、...、yN が含まれます (0 < yi <= 1000)。
出力フォーマット
各テスト ケースの出力期待値 V(yp1, ..., ypn) について、小数点以下 2 桁に丸められます。
サンプル入力
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 に対して永久に実行されます。各スティックの値を個別に計算することで問題を解決できると思います。この問題に対する他の効率的なアプローチがあるかどうかを知る必要があります。各スティックの値を個別に計算する必要がある根拠は何ですか?