Problem Statement
You are only allowed to redistribute your water using the following method. First, pick two bottles that contain an equal amount of water. Then, pour the entire content of one of those bottles into the other. Repeat this process as many times as necessary.
Because of this restriction, it may be impossible to end up with no more than K non-empty bottles using only the N bottles that you have initially. Fortunately, you can also buy more bottles. Each bottle that you buy will contain exactly 1 liter of water and have unlimited capacity. For example, consider the case where N is 3 and K is 1. It's impossible to get from 3 bottles to 1. If you pour one bottle into another, you end up with one 2 liter bottle and one 1 liter bottle. At that point, you're stuck. However, if you then buy another bottle, you can pour that bottle into the 1 liter bottle, and pour the resulting 2 liter bottle into the other 2 liter bottle to end up with just one 4 liter bottle.
Return the minimum number of additional bottles you must buy in order to achieve your goal. If it's impossible, return -1 instead.
Definition
- Class:
- PouringWater
- Method:
- getMinBottles
- Parameters:
- int, int
- Returns:
- int
- Method signature:
- int getMinBottles(int N, int K)
- (be sure your method is public)
Constraints
- N will be between 1 and 10^7, inclusive.
- K will be between 1 and 1000, inclusive.
Examples
3
1
Returns: 1
The example from the problem statement.
13
2
Returns: 3
If you have 13, 14, or 15 bottles, you can't end up with one or two bottles. With 16 bottles, you can end up with one bottle.
1000000
5
Returns: 15808
1
1
Returns: 0
1
1000
Returns: 0
10000000
1
Returns: 6777216
10000000
2
Returns: 485760
10000000
1000
Returns: 0
8388608
1
Returns: 0
8941948
3
Returns: 3716
8388607
22
Returns: 1
8388607
23
Returns: 0
8387584
12
Returns: 1024
8387584
13
Returns: 0
10000000
1000
Returns: 0
999999
9
Returns: 1
666
2
Returns: 102
8388609
1
Returns: 8388607
4414013
1
Returns: 3974595
7478469
1
Returns: 910139
5496348
1
Returns: 2892260
8325561
1
Returns: 63047
2836846
1
Returns: 1357458
62503
1
Returns: 3033
8800757
1
Returns: 7976459
8816669
1
Returns: 7960547
9439671
1
Returns: 7337545
9853251
1
Returns: 6923965
9883163
2
Returns: 602597
5222001
2
Returns: 20879
2646160
2
Returns: 499568
3538422
2
Returns: 655882
9582122
2
Returns: 903638
674320
3
Returns: 13808
9414628
3
Returns: 22556
240547
3
Returns: 21597
5417126
3
Returns: 87898
1327199
3
Returns: 16289
4592987
4
Returns: 2725
1300952
4
Returns: 9768
5045682
4
Returns: 590
4375782
4
Returns: 15130
7590137
4
Returns: 12039
5632545
5
Returns: 3551
9219160
5
Returns: 5032
2556304
5
Returns: 112
359025
5
Returns: 1423
2135180
5
Returns: 116
1
10
Returns: 0
1000000
239
Returns: 0
1
100
Returns: 0
10
100
Returns: 0
13
50
Returns: 0
1
137
Returns: 0
100000
239
Returns: 0
2
10
Returns: 0
511
512
Returns: 0
5
20
Returns: 0
10000000
856
Returns: 0
6767
34
Returns: 0
1
2
Returns: 0
9
3
Returns: 0
1
4
Returns: 0
173141
31
Returns: 0
8388615
2
Returns: 1
2
4
Returns: 0
2
5
Returns: 0
4
70
Returns: 0
9990000
7
Returns: 144
3
5
Returns: 0
5
1
Returns: 3
5
10
Returns: 0
1
5
Returns: 0
5
100
Returns: 0
993445
43
Returns: 0
4
444
Returns: 0
500
1000
Returns: 0
3452343
234
Returns: 0
85
4
Returns: 0
2
100
Returns: 0
4
8
Returns: 0
5
2
Returns: 0
14
2
Returns: 2
16
17
Returns: 0
3602
3
Returns: 494
21
3
Returns: 0
1
3
Returns: 0
4
100
Returns: 0
3
99
Returns: 0
3
6
Returns: 0
13
1000
Returns: 0
10000000
100
Returns: 0
283686
8
Returns: 0
43
3
Returns: 1
8
10
Returns: 0
20356
2
Returns: 124
19
2
Returns: 1
458746
999
Returns: 0
2
23
Returns: 0
128
3
Returns: 0
5
3
Returns: 0
9000000
1
Returns: 7777216
898989
4
Returns: 18515
5
500
Returns: 0
11
10
Returns: 0
10000000
3
Returns: 485760
8388607
1000
Returns: 0