dieses Problem von interviewstreet.comWie man sich der vertikalen Sticks-Herausforderung nähert?
gegebener Gruppe von ganzen Zahlen Y = y1, ... aufgenommen wird, yn, wir n Liniensegmente so, dass Endpunkte des Segments haben i (i, 0) und (i, yi). Stellen Sie sich vor, dass aus der Oberseite jedes Segments ein horizontaler Strahl nach links geschossen wird, und dieser Strahl stoppt, wenn er ein anderes Segment berührt oder auf die y-Achse trifft. Wir konstruieren ein Array von n ganzen Zahlen, v1, ..., vn, wobei vi ist gleich Länge des Strahls von der Spitze des Segments i erschossen. Wir definieren V (y1, ..., yn) = v1 + ... + vn. Wenn wir beispielsweise Y = [3,2,5,3,3,4,1,2] haben, dann gilt v1, ..., v8 = [1,1,3,1,1 , 3,1,2], wie unten in der Abbildung dargestellt:
von [1 für jede Permutation p, ..., n], können wir berechnen, V (YP1, ..., ypn). Wenn wir eine gleichmäßig zufällige Permutation p von [1, ..., n] wählen, was ist der erwartete Wert von V (yp1, ..., ypn)?
Eingangsformat
Erste Zeile der Eingabe enthält eine einzelne ganze Zahl T (1 < = T < = 100). T Testfälle folgen.
Die erste Zeile jedes Testfalls ist eine einzelne ganze Zahl N (1 < = N < = 50). Die nächste Zeile enthält positive ganze Zahlen y1, ..., yN getrennt durch einzelnes Leerzeichen (0 < yi < = 1000).
Ausgabeformat
Für jeden Testfall Ausgangserwartungswert von V (YP1, ..., YPN), gerundet auf zwei Stellen nach dem Komma.
Probeneingangs
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
Beispielausgabe
4.33 3.00 4.00 6.00 5.80 11.15
Erläuterung
Fall 1: Wir haben 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. Der Durchschnitt dieser Werte ist 4,33.
Fall 2: Egal was die Permutation ist, V (yp1, yp2, yp3) = 1 + 1 + 1 = 3, so ist die Antwort 3.00.
Fall 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, und der Durchschnitt dieser Werte ist 4,00.
Eine naive Lösung des Problems wird für N = 50 für immer laufen. Ich glaube, dass das Problem gelöst werden kann, indem man einen Wert für jeden Stock unabhängig berechnet. Ich muss noch wissen, ob es einen anderen effizienten Ansatz für dieses Problem gibt. Auf welcher Grundlage müssen wir den Wert für jeden Stock selbst berechnen?
Dank gibt, können Sie bitte mehr Klar, ich verstehe nicht genau, was deine Logik ist. –
Wir versuchen für jeden Stick zu zählen, wie viele Permutationen sind, dass der Strahl davon genau len wird. – kilotaras
Mebbe mir fehlt ein mathematischer Hintergrund, aber könnten Sie den Weg zur Berechnung der Permutation des einzelnen Stocks sagen? –