Problem Statement
You just entered a strange town. The town is currently inhabited by M monsters and B bunnies.
The inhabitants interact in the following way: Whenever two bunnies meet, nothing happens. Whenever a monster meets a bunny, the monster eats the bunny. Whenever two monsters meet, they start fighting and they both die in the fight.
Whenever you meet a bunny, you can decide whether you kill it or not. A bunny will never kill you. You cannot kill a monster. However, if you meet a monster, it will kill you without hesitation.
All the town's inhabitants roam the town at random. More precisely, we will make the following assumptions.
- Meetings will occur at different moments in time.
- Each time exactly two beings will meet.
- Those two beings are always chosen uniformly at random from the set of all living beings in town, including you.
- All random choices are mutually independent.
You win if at some moment you can not be killed anymore. You are not allowed to leave the town until you either win or get killed.
Write a method that will calculate the probability that you will win if you make the best decisions you can.
Definition
- Class:
- MonstersAndBunnies
- Method:
- survivalProbability
- Parameters:
- int, int
- Returns:
- double
- Method signature:
- double survivalProbability(int M, int B)
- (be sure your method is public)
Notes
- The returned value must be accurate to within a relative or absolute value of 1E-9.
- When deciding whether to kill a bunny you just met, your only goal is to maximize your winning probability.
Constraints
- M will be between 0 and 1,000, inclusive.
- B will be between 0 and 1,000, inclusive.
Examples
0
0
Returns: 1.0
This town is empty. As soon as you enter it, you win.
0
47
Returns: 1.0
Peaceful bunny pastures, you will not get killed here.
1
0
Returns: 0.0
Sooner or later the monster will find you and kill you.
1
47
Returns: 0.0
The bunnies won't help you. Sooner or later the monster will find you and kill you.
2
0
Returns: 0.3333333333333333
In 1/3 of all cases the two monsters meet first, kill each other and you win. In the other 2/3 cases, one of the two monsters meets you first and kills you.
999
987
Returns: 0.0
1000
1000
Returns: 9.99000999000999E-4
1000
0
Returns: 9.99000999000999E-4
0
1000
Returns: 1.0
1
1
Returns: 0.0
0
1
Returns: 1.0
3
0
Returns: 0.0
4
1
Returns: 0.2
5
5
Returns: 0.0
15
155
Returns: 0.0
988
976
Returns: 0.0010111223458038423
946
235
Returns: 0.0010559662090813093
235
946
Returns: 0.0
987
987
Returns: 0.0
32
325
Returns: 0.030303030303030304
86
456
Returns: 0.011494252873563218
4
2
Returns: 0.2
100
100
Returns: 0.009900990099009901
1000
988
Returns: 9.99000999000999E-4
999
999
Returns: 0.0
4
666
Returns: 0.2
6
991
Returns: 0.14285714285714285
900
17
Returns: 0.0011098779134295228
988
917
Returns: 0.0010111223458038423
4
12
Returns: 0.2
10
10
Returns: 0.09090909090909091
100
1
Returns: 0.009900990099009901
992
654
Returns: 0.0010070493454179255
20
20
Returns: 0.047619047619047616
850
300
Returns: 0.0011750881316098707
900
1000
Returns: 0.0011098779134295228
100
0
Returns: 0.009900990099009901
418
998
Returns: 0.002386634844868735
11
999
Returns: 0.0
998
1000
Returns: 0.001001001001001001
10
100
Returns: 0.09090909090909091
2
1
Returns: 0.3333333333333333
56
28
Returns: 0.017543859649122806
998
999
Returns: 0.001001001001001001
300
300
Returns: 0.0033222591362126247
2
10
Returns: 0.3333333333333333
1000
599
Returns: 9.99000999000999E-4
800
500
Returns: 0.0012484394506866417
376
224
Returns: 0.002652519893899204
972
914
Returns: 0.0010277492291880781
300
1000
Returns: 0.0033222591362126247
2
2
Returns: 0.3333333333333333
4
0
Returns: 0.2
900
123
Returns: 0.0011098779134295228
100
67
Returns: 0.009900990099009901
1000
999
Returns: 9.99000999000999E-4
984
383
Returns: 0.0010152284263959391
6
2
Returns: 0.14285714285714285
820
717
Returns: 0.001218026796589525
2
5
Returns: 0.3333333333333333
786
952
Returns: 0.0012706480304955528
4
4
Returns: 0.2
200
200
Returns: 0.004975124378109453
2
3
Returns: 0.3333333333333333
6
954
Returns: 0.14285714285714285
320
436
Returns: 0.003115264797507788
10
1
Returns: 0.09090909090909091
34
22
Returns: 0.02857142857142857
68
56
Returns: 0.014492753623188406
4
5
Returns: 0.2
10
0
Returns: 0.09090909090909091
999
0
Returns: 0.0
3
10
Returns: 0.0
55
100
Returns: 0.0
500
497
Returns: 0.001996007984031936
851
320
Returns: 0.0
436
123
Returns: 0.002288329519450801
33
5
Returns: 0.0
4
999
Returns: 0.2
1000
34
Returns: 9.99000999000999E-4
100
200
Returns: 0.009900990099009901
124
123
Returns: 0.0080
248
533
Returns: 0.004016064257028112
22
67
Returns: 0.043478260869565216
8
4
Returns: 0.1111111111111111
4
3
Returns: 0.2
2
1000
Returns: 0.3333333333333333
20
15
Returns: 0.047619047619047616
973
914
Returns: 0.0
88
112
Returns: 0.011235955056179775
990
999
Returns: 0.0010090817356205853
990
990
Returns: 0.0010090817356205853
4
16
Returns: 0.2
5
30
Returns: 0.0
50
5
Returns: 0.0196078431372549
4
100
Returns: 0.2
4
1000
Returns: 0.2
788
1000
Returns: 0.0012674271229404308
1000
400
Returns: 9.99000999000999E-4
70
69
Returns: 0.014084507042253521
322
212
Returns: 0.0030959752321981426
158
245
Returns: 0.006289308176100629
2
100
Returns: 0.3333333333333333
100
20
Returns: 0.009900990099009901
984
374
Returns: 0.0010152284263959391
3
2
Returns: 0.0
6
500
Returns: 0.14285714285714285
1000
100
Returns: 9.99000999000999E-4
1000
970
Returns: 9.99000999000999E-4
500
1
Returns: 0.001996007984031936
850
320
Returns: 0.0011750881316098707
120
120
Returns: 0.008264462809917356
68
23
Returns: 0.014492753623188406
4
20
Returns: 0.2
28
24
Returns: 0.034482758620689655
42
50
Returns: 0.023255813953488372
978
617
Returns: 0.0010214504596527069
7
5
Returns: 0.0
966
765
Returns: 0.001034126163391934
956
941
Returns: 0.0010449320794148381
49
99
Returns: 0.0
444
666
Returns: 0.0022471910112359553
500
34
Returns: 0.001996007984031936
42
40
Returns: 0.023255813953488372
232
34
Returns: 0.004291845493562232
40
10
Returns: 0.024390243902439025
50
50
Returns: 0.0196078431372549
16
4
Returns: 0.058823529411764705
998
850
Returns: 0.001001001001001001
10
20
Returns: 0.09090909090909091
900
900
Returns: 0.0011098779134295228
2
7
Returns: 0.3333333333333333
124
343
Returns: 0.0080
425
451
Returns: 0.0
234
123
Returns: 0.00425531914893617
456
223
Returns: 0.002188183807439825
90
8
Returns: 0.01098901098901099
70
56
Returns: 0.014084507042253521
1000
977
Returns: 9.99000999000999E-4
900
500
Returns: 0.0011098779134295228
4
120
Returns: 0.2
4
10
Returns: 0.2
8
8
Returns: 0.1111111111111111
4
125
Returns: 0.2
868
944
Returns: 0.0011507479861910242
16
28
Returns: 0.058823529411764705
2
71
Returns: 0.3333333333333333
3
1
Returns: 0.0
66
100
Returns: 0.014925373134328358
122
345
Returns: 0.008130081300813009
900
0
Returns: 0.0011098779134295228
30
13
Returns: 0.03225806451612903
480
100
Returns: 0.002079002079002079
11
1
Returns: 0.0
400
1000
Returns: 0.0024937655860349127
102
999
Returns: 0.009708737864077669
444
444
Returns: 0.0022471910112359553
7
3
Returns: 0.0
12
1
Returns: 0.07692307692307693
12
11
Returns: 0.07692307692307693
1000
74
Returns: 9.99000999000999E-4
988
988
Returns: 0.0010111223458038423