Problem Statement
Hagar the Horrible is going to raid one of the king's castles.
Castle i contains gold[i] tons of gold.
The king currently has only one battalion of soldiers. He can secretly station it at any one of the castles.
If Hagar attacks an unprotected castle, his band of vikings will loot all the gold from that castle. If Hagar attacks the protected castle, the king's soldiers will chase off the vikings and Hagar will go home empty-handed.
All of the above information is public (i.e., both Hagar and the king know it). The king must choose which castle to protect without knowing where Hagar plans to attack, and Hagar must choose where to attack without knowing which castle the king will protect.
You are given the
Definition
- Class:
- Hagar
- Method:
- expectedProfit
- Parameters:
- int[]
- Returns:
- double
- Method signature:
- double expectedProfit(int[] gold)
- (be sure your method is public)
Notes
- The return value must have an absolute or a relative error at most 1e-9.
- Optimal play can formally be defined as follows: the value X you should return is the only real number such that Hagar can make sure that his expected profit is at least X regardless of the king's strategy, and the king can make sure that Hagar's expected profit is at most X regardless of Hagar's strategy.
Constraints
- gold will contain between 1 and 30 elements, inclusive.
- Each element of gold will be between 0 and 40, inclusive.
Examples
{37, 37, 37}
Returns: 24.666666666666664
With three identical castles the best strategy for both the king and Hagar is to pick the castle uniformly at random. In two out of three cases Hagar will loot the chosen castle, in one of three cases he'll be unlucky and choose the castle the king defended.
{0, 0, 0, 0, 0}
Returns: 0.0
The king has no gold, strategies don't matter.
{0, 0, 0, 27, 0}
Returns: 0.0
All the king's gold is in one of the castles. The king can just protect the gold and Hagar cannot loot anything.
{1, 37, 37}
Returns: 18.5
Both parties ignore the poor castle and flip a fair coin to choose one of the two rich castles.
{1, 3, 4, 8}
Returns: 2.823529411764706
{1, 0, 3, 0, 4, 0, 8}
Returns: 2.823529411764706
{3, 4, 8, 3}
Returns: 2.8800000000000003
{31, 32, 40, 33, 34, 35, 36, 37, 38, 39}
Returns: 31.834733989687372
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
Returns: 6.263463131731567
{0, 1, 2, 4, 8, 16, 32}
Returns: 10.666666666666666
{1, 1, 2, 3, 5, 8, 13, 21, 34}
Returns: 12.990902729181245
{0}
Returns: 0.0
{27}
Returns: 0.0
{10, 11}
Returns: 5.238095238095238
{10, 10}
Returns: 5.0
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
Returns: 0.0
{29, 6, 24, 1, 12, 6}
Returns: 13.132075471698112
{19, 13, 1, 1, 1, 40, 5, 14, 12}
Returns: 13.417402269861288
{8}
Returns: 0.0
{21, 1, 3, 4, 15, 2, 32}
Returns: 13.74233128834356
{17, 6, 1, 6, 6, 28, 24}
Returns: 14.683804627249355
{3, 17, 24, 5, 3, 1, 5, 1}
Returns: 9.951219512195122
{1, 17, 1, 2}
Returns: 1.7894736842105263
{10}
Returns: 0.0
{15, 1, 2, 31, 14, 23, 6, 26, 19}
Returns: 17.98243733088273
{1, 36, 22, 3, 1}
Returns: 13.655172413793103
{5, 8, 3, 2, 2, 3, 3, 24, 7}
Returns: 6.461538461538462
{31, 11, 7, 18, 5, 2}
Returns: 11.387755102040817
{4, 3, 2, 5, 1, 1, 3, 7, 6}
Returns: 3.949843260188088
{6, 6, 13, 8}
Returns: 5.604790419161676
{1, 2, 1}
Returns: 0.8
{8}
Returns: 0.0
{29, 1, 8, 23, 1, 1, 23, 14, 9}
Returns: 16.469135802469136
{9, 13, 2, 1, 2}
Returns: 5.318181818181818
{1, 13, 6, 12, 7, 1, 4, 38, 3}
Returns: 10.719710669077758
{1, 23, 1, 2, 12, 35, 2, 2, 8, 30}
Returns: 18.978388998035367
{2, 7, 24, 11, 3, 29}
Returns: 13.132075471698112
{14, 31, 3, 1, 9, 34, 17, 27, 11, 17}
Returns: 20.26201495194019
{1, 21, 15, 3, 16}
Returns: 11.313131313131315
{2, 24, 3, 6}
Returns: 4.800000000000001
{14, 7, 1}
Returns: 4.666666666666667
{15, 6, 17, 3}
Returns: 7.96875
{2}
Returns: 0.0
{13, 2, 1, 1, 11, 13, 6, 7, 9}
Returns: 8.430131004366812
{1, 28, 6, 4}
Returns: 4.9411764705882355
{2, 1, 1}
Returns: 0.8
{4, 25}
Returns: 3.4482758620689657
{1, 7, 25, 1, 5, 9}
Returns: 6.803455723542117
{20, 1, 16, 5, 26, 1, 2, 3}
Returns: 13.2484076433121
{17, 18, 1, 9, 3}
Returns: 8.869565217391305
{17, 16, 17}
Returns: 11.10204081632653
{26, 34}
Returns: 14.73333333333333
{6, 13, 33, 31, 28, 40, 7, 29, 13}
Returns: 25.355268650144723
{1, 38, 3, 39, 37, 4, 10}
Returns: 25.321634726391135
{36, 20, 9, 22, 23, 13, 20, 14, 24}
Returns: 19.351548888794458
{26, 35, 4, 33, 1, 32}
Returns: 23.330689671916222
{6, 21, 2, 15, 39, 9, 34, 37}
Returns: 24.36652594983859
{31, 24, 23, 3, 19, 20, 30, 36, 24}
Returns: 22.70861348998514
{22, 14, 26, 1, 21, 15, 22, 31, 1, 39}
Returns: 21.359566352138124
{3, 10, 38, 27, 21, 37, 34, 29}
Returns: 25.927831188181568
{34, 2, 33, 8, 21, 30, 6, 18, 32, 34}
Returns: 26.023048488801912
{14, 40, 0}
Returns: 10.370370370370372
{2, 22, 5, 28, 26, 28, 10, 19, 25, 9}
Returns: 20.476628822747266
{26, 7, 8, 13, 6, 24, 35, 3, 16, 7}
Returns: 18.39932603201348
{0, 24, 4, 35, 11, 9, 18, 38, 29}
Returns: 22.89435934640307
{14, 39, 5}
Returns: 10.301886792452832
{39, 24, 18, 13, 19, 11, 10}
Returns: 17.094520986863188
{4, 29, 40, 11, 1, 31, 17, 8, 35, 24}
Returns: 24.935116394254585
{0}
Returns: 0.0
{21, 16, 0, 25}
Returns: 13.32275971451229
{23}
Returns: 0.0
{17, 21, 36, 33, 16, 3, 4, 5, 4, 13}
Returns: 18.92150170648464
{28, 35, 6, 37, 30, 28, 17, 37}
Returns: 26.682692307692307
{24, 17, 15, 2, 13, 5, 14, 9}
Returns: 12.677946423998222
{29, 33, 1, 35, 2, 40, 26, 15, 0}
Returns: 25.50715299070981
{32, 35, 24, 28, 5, 25, 23, 8, 13, 5}
Returns: 22.657175358562696
{14, 0, 35, 10, 8}
Returns: 10.0
{28, 38, 34, 10, 21}
Returns: 21.871825876662637
{4, 31, 33, 4, 33, 35}
Returns: 24.70446182152714
{15, 1, 39, 0, 30, 2, 0, 31, 21}
Returns: 21.92203082502267
{34, 9, 2, 17, 14}
Returns: 12.526315789473685
{12, 19, 7, 28, 9, 10, 28, 7}
Returns: 16.12121212121212
{15, 12, 39, 40, 35, 22, 9, 34}
Returns: 27.618150260352095
{4, 37, 35, 9, 25, 24, 11}
Returns: 21.855515447002013
{39, 8, 9, 21, 26, 20, 1, 34, 13, 21}
Returns: 21.387096774193548
{24, 13, 19, 32}
Returns: 15.930131004366814
{29, 6, 24, 1, 12, 6, 19, 13, 1, 1, 1, 40, 5, 14, 12, 4, 8, 21, 1, 3, 4, 15, 2, 32, 17, 6}
Returns: 22.658708627238198
{1, 6, 6, 28, 24, 3, 17, 24, 5, 3, 1, 5, 1, 1, 17, 1, 2, 14, 10, 1, 2, 31, 14}
Returns: 19.82741116751269
{23, 6, 26, 19, 1, 36, 22, 3, 1, 5, 8, 3, 2, 2, 3, 3, 24, 7, 31, 11, 7, 18, 5}
Returns: 21.824830495222113
{2, 4, 3, 2, 5, 1, 1, 3, 7, 6, 3, 6, 13, 8, 1, 2, 1, 2, 8, 29, 1, 8, 23, 1}
Returns: 12.91288160833954
{23, 14, 9, 9, 13, 2, 1, 2, 1, 13, 6, 12, 7, 1, 4, 38, 3, 1, 23, 1, 2}
Returns: 17.656565656565657
{12, 35, 2, 2, 8, 30, 2, 7, 24, 11, 3, 29, 14, 31, 3, 1, 9, 34, 17, 27, 11, 17, 1, 21, 15, 3, 16}
Returns: 25.62862049702623
{2, 24, 3, 6, 14, 7, 1, 1, 2, 15, 6, 17, 3, 2, 13, 2, 1, 1, 11, 13, 6, 7, 9, 28}
Returns: 14.787711425612702
{6, 4, 16, 1, 19, 4, 25, 1, 7, 25, 1, 5, 9, 20, 1, 16, 5, 26, 1, 2, 3, 17, 18}
Returns: 18.091924555942136
{1, 9, 3, 17, 16, 17, 29, 12, 3, 21, 2, 9, 36, 4, 20, 2, 1, 12, 1, 40, 16, 13, 34, 25, 3}
Returns: 25.713043898198677
{14, 7, 2, 2, 15, 1, 8, 13, 16, 6, 30, 13, 10, 5, 9, 1, 1, 12, 16, 1, 17, 22, 8, 3}
Returns: 15.231630748345493
{6, 32, 1, 2, 3, 13, 1, 3, 5, 3, 1, 29, 5, 28, 1, 1, 2, 3, 6, 3, 6, 7, 11, 32}
Returns: 22.60788863109049
{4, 3, 32, 7, 2, 18, 7, 31, 18, 10, 2, 7, 23, 29, 23, 2, 6, 14, 4, 13, 33, 2, 21, 1, 23, 5}
Returns: 23.38381706966624
{13, 2, 29, 24, 1, 12, 23, 1, 8, 19, 11, 20, 28, 6, 15, 9, 1, 12, 9, 29, 13, 20, 1, 3, 4, 5, 30, 2}
Returns: 22.40564340043669
{6, 1, 1, 9, 1, 24, 5, 38, 12, 3, 24, 7, 1, 3, 11, 10, 7, 7, 20, 18, 1, 14, 3, 6, 1, 2, 5, 6}
Returns: 18.791208791208792
{1, 12, 12, 35, 2, 15, 13, 4, 6, 5, 16, 2, 3, 16, 23, 2, 10, 2, 2, 14, 40, 3, 13, 3, 3, 4, 9}
Returns: 20.608
{35, 14, 9, 20, 3, 34, 17, 13, 36, 37, 40, 9, 6, 35, 37, 24, 37, 10, 5, 35, 11, 36, 31, 18, 35, 36, 15, 23, 38}
Returns: 33.38641003903014
{20, 9, 7, 13, 26, 27, 5, 37, 12, 9, 20, 1, 4, 14, 22, 0, 5, 17, 38, 12, 2, 1, 28, 26, 14, 27, 6, 19, 24}
Returns: 24.994349900968015
{1, 21, 39, 6, 37, 21, 11, 18, 10, 1, 35, 5, 28, 14, 18, 38, 13, 36, 26, 9, 19, 26, 20, 22, 24}
Returns: 29.556712455699163
{14, 4, 39, 23, 7, 1, 5, 8, 7, 28, 30, 32, 12, 21, 19, 19, 4, 15, 10, 1, 5}
Returns: 23.821123432103256
{39, 17, 10, 20, 1, 17, 15, 37, 18, 18, 25, 14, 40, 29, 14, 24, 5, 8, 30, 13, 34, 31, 37, 31, 4, 28, 2}
Returns: 30.207985996228608
{21, 34, 29, 17, 33, 35, 28, 4, 21, 38, 29, 12, 22, 6, 14, 4, 15, 23, 24, 12, 9, 5, 32, 38, 27}
Returns: 29.0414347316495
{6, 25, 10, 4, 38, 10, 16, 19, 0, 9, 10, 2, 25, 8, 0, 26, 27, 0, 3, 0, 20, 33, 2, 23, 37, 36}
Returns: 26.943164312963244
{17, 30, 7, 29, 23, 31, 1, 13, 19, 3, 0, 25, 37, 21, 17, 31, 40, 38, 24, 14, 36}
Returns: 29.416082432480568
{16, 22, 33, 16, 17, 6, 1, 22, 39, 38, 4, 10, 34, 39, 33, 36, 9, 9, 25, 31, 33, 18, 28, 19, 34, 2, 13, 19, 14}
Returns: 31.3592380862575
{40, 33, 40, 35, 5, 30, 23, 34, 34, 15, 38, 5, 33, 33, 0, 39, 24, 18, 21, 29, 3, 27, 40, 15, 39, 28, 34, 12, 33, 35}
Returns: 33.55975067768211
{12, 8, 3, 19, 16, 27, 8, 35, 5, 29, 21, 26, 0, 32, 36, 34, 4, 4, 23, 24, 9, 5, 21, 10}
Returns: 26.52087023873608
{31, 37, 34, 13, 23, 23, 10, 39, 39, 33, 33, 29, 22, 39, 15, 12, 13, 34, 6, 16, 17, 29, 19, 35, 17, 6, 34, 15, 39}
Returns: 32.572874742820126
{20, 7, 4, 9, 37, 31, 34, 17, 29, 13, 11, 13, 24, 28, 30, 19, 18, 22, 7, 32, 39, 35}
Returns: 28.92856021778499
{26, 36, 21, 8, 13, 17, 15, 39, 36, 37, 16, 12, 14, 16, 12, 0, 20, 3, 5, 18, 5, 15, 20}
Returns: 27.720384204909287
{13, 0, 3, 31, 40, 33, 24, 39, 3, 27, 26, 25, 24, 3, 7, 21, 13, 26, 23, 8, 0, 25, 39, 25, 23, 3, 34, 38, 40}
Returns: 32.03200881513831
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30}
Returns: 23.015346417522796
{40, 40, 39, 39, 38, 38, 37, 37, 36, 36, 35, 35, 34, 34, 33, 33, 32, 32, 31, 31, 30, 30, 29, 29, 28, 28, 27, 27, 25, 21}
Returns: 34.30359524605858
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 }
Returns: 23.015346417522796
{1, 13, 7, 24, 10, 18, 30, 2, 0, 11, 35, 4, 20, 25, 22, 5, 18, 2, 22, 28, 13, 15, 35, 29, 40, 32, 4, 0, 22, 35 }
Returns: 28.601340443226842
{2, 33, 20, 36, 21, 32, 17, 0, 12, 11, 13, 31, 31, 10, 32, 4, 20, 9, 24, 2, 15, 28, 3, 32, 31, 23, 22, 0, 28, 26 }
Returns: 28.15711652672537
{0, 0, 8, 9 }
Returns: 4.235294117647059