Problem Statement
Initially, they are given a
The game is played as follows. Players take alternate turns, and Ciel makes the first turn. In each turn, the player must remove one of the opponent's characters. There must be at least one of the current player's characters to the left of the removed character, and one of the current player's characters to the right of the removed character.
For example, if the current state of the game is "oooxxoox" and it's Ciel's turn, she can remove either of the two 'x' characters in the middle, but she cannot remove the last 'x' character.
The game ends when a player cannot make a valid move. Once the game is over, each player counts the number of his/her characters that are still present in the
Both players use an optimal strategy. If a player can win, he/she will follow the strategy that guarantees that he/she wins and has the maximum number of characters at the end of the game. Otherwise, if a player can force the game to end in a draw, he/she will follow the strategy that does so. Otherwise, he/she will follow the strategy that minimizes the number of characters that the opponent has at the end of the game.
You are given a
Return the number of possible placements where Ciel wins and has at least R 'o' characters left at the end of the game.
Definition
- Class:
- RemoveGame
- Method:
- countWinning
- Parameters:
- String, int
- Returns:
- long
- Method signature:
- long countWinning(String field, int R)
- (be sure your method is public)
Constraints
- field will contain between 2 and 40 characters, inclusive.
- Each character in field will be lowercase 'o', lowercase 'x' or '?'.
- The first character in field will be 'o'.
- The last character in field will be 'x'.
- R will be between 1 and 40, inclusive.
Examples
"o??x"
2
Returns: 2
In this case, possible arrangements are as follows: ooox : Ciel wins with 3 'o' characters. ooxx : Ciel draws with Toastman. oxox : Ciel wins with 2 'o' characters. oxxx : Toastman wins with 3 'x' characters Thus, the number of arrangements where Ciel wins with at least 2 'o' characters is 2.
"o??x"
3
Returns: 1
In this case, only "ooox" is possible.
"oxxxxoooox"
2
Returns: 1
The game ends in "oox" and Ciel wins with 2 'o' characters.
"ooooxxoxxx"
1
Returns: 0
The game ends in "ooooxxxx" and Ciel draws with Toastman.
"ox?o?ox"
3
Returns: 3
"o????xooxooxxxxxxx"
5
Returns: 1
"oxxxxxxxxxoooxooxoooooooooooo??????x"
5
Returns: 64
"oo???xx???xx???oxox???xx"
7
Returns: 126
"o??????????????????????????????????????x"
1
Returns: 143548512057
"o??????????????????????????????????????x"
8
Returns: 82797734692
"o??????????????????????????????????????x"
15
Returns: 9217086029
"o??????????????????????????????????????x"
22
Returns: 292726058
"o??????????????????????????????????????x"
29
Returns: 1169618
"o??????????????????????????????????????x"
36
Returns: 778
"o??????????????????????????????????????x"
40
Returns: 0
"ox"
1
Returns: 0
"ox"
2
Returns: 0
"ox"
3
Returns: 0
"ox"
40
Returns: 0
"o???????????????xxx"
1
Returns: 9949
"oooo????????xxxxxxxxx"
1
Returns: 9
"oooooooo???????????????????xx"
8
Returns: 480492
"oooo???????????xxxxxxxxx"
6
Returns: 226
"o?????xxxx"
1
Returns: 5
"oooo?????????xxxxxxx"
8
Returns: 124
"o???????xxxxxxx"
3
Returns: 1
"oooo????????????xxxx"
2
Returns: 2223
"ox????o?xx"
1
Returns: 16
"o???xx?x?x"
2
Returns: 2
"ox???oo??x"
3
Returns: 22
"oo?xx??oxx"
4
Returns: 1
"o????x???x"
5
Returns: 15
"o?x??xo?xoo?x?o??ox?x???x"
2
Returns: 1586
"oxo?x??x?ox????oxx????xox"
4
Returns: 600
"o?????xxx?????xx?o?oo??xx"
6
Returns: 1792
"o??x???o???x?????o?x?xoox"
8
Returns: 3430
"o???xo?x???xx??o?oxx?x??x"
10
Returns: 8
"o??o?????oxo?oxo??x??oox?x?o?o?oo?????ox"
3
Returns: 1898712
"oo?x?xox??x??x???x??o??xo?ox?oo?xx???o?x"
7
Returns: 122641
"o??????oo???x?????xx??x????xoo???o???x?x"
10
Returns: 16108054
"o?oo?xx????o?????xo?oxxo??o???o?????x??x"
1
Returns: 11369898
"o??x???o?o?????o??o????oxo??o?oxoox??o?x"
5
Returns: 7337313
"o???xx?????????o?o???xx???oox??o???oo??x"
11
Returns: 8098755
"ox??o?oxo??xox?o?x??x????ox??o??x?o????x"
12
Returns: 140955
"o??????ooxo???oxo???xo?xo?xx?ooo?x?????x"
12
Returns: 304350
"o???ox??????xo??x??????x?o?????ox?????xx"
6
Returns: 71950129
"oo???x??oxxxo?xo???ox?o???xox???o???ox?x"
2
Returns: 499978
"o??????????x??xxo??x????oo?x?????oo???ox"
5
Returns: 57226005
"ox???x?o??x???oxxoo???o??o???x?x?xo?x?ox"
3
Returns: 695860
"o?ox???xo?o?ox?x??x?o?x?xox?x?o??xo??x?x"
3
Returns: 126008
"o?x??ox??ox?xx??oo??o????x?ooooo?x?x???x"
6
Returns: 587879
"oo????o??x???x???x??x???xxx??o??x?x??xxx"
13
Returns: 30716
"o?x?x??xoo?oo???o???xoo????xo?x?o?o?oo?x"
5
Returns: 872205
"oo???x????????x??o???o??ox??o??xo??oxo?x"
8
Returns: 13207306
"oxxxxo?x???????o?o??x?????o?xx????oo?o?x"
12
Returns: 149172
"oxooooooooxoooooooooooooxooxoxooooooooox"
30
Returns: 1
"ooooxooooxoxooooooooooxooooooooooxooooox"
31
Returns: 0
"ooxxxxooxxooxxxxoxoxoxoxxxxoxooxxoxoxoox"
1
Returns: 0
"oxxxxoxoxoxoxxooooxoxxxoxxxxoxxxooxoxoox"
1
Returns: 0
"ooxxxxxoxoxxxxxxxxxxxoxooxxxxxxxxxxxxxxx"
1
Returns: 0
"ooxxxxooxxxxxxxxxoxoxxxxxoxxxxxxxxxxxxxx"
1
Returns: 0
"oooooooooxoxooxoooooooxxoooxoxoxxoxoooox"
20
Returns: 1
"ooooooooxoxoooxxoooooxxoxxxooooooooooxox"
21
Returns: 0
"oxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
1
Returns: 0
"oxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
1
Returns: 0
"oxooxoooooxxxoxoxxoxxxxxxxooxxoxxoxoxoox"
1
Returns: 0
"oxxxxxxoxoooooooxoooxxxooxoxxxooxoxxxxxx"
1
Returns: 0
"o?????x??????o???????o?????????x???????x"
29
Returns: 13230
"o?????o????????????x?o???????????x?????x"
34
Returns: 36
"o?????????????xo?????????o?????x???????x"
22
Returns: 9494953
"o???????????????x???o?????o????x???????x"
28
Returns: 60537
"o????o???????????x?x??o????????????????x"
26
Returns: 384168
"o??o?????????????????????x??ox?????????x"
29
Returns: 13160
"o??????x?????x??o????????????????o?????x"
32
Returns: 631
"o?????????????????????x???xo???o???????x"
20
Returns: 31529068
"o???????????o????????o???x??????x??????x"
20
Returns: 38007688
"o???????x?????????????????o?x?o????????x"
28
Returns: 59536
"ox??????o?o????????????????x???????????x"
21
Returns: 14360746
"o???????????o??x????????????ox?????????x"
25
Returns: 662424
"oxx?xox???x???xxx??xx?xx?ox???xx?xxxx?ox"
4
Returns: 0
"oo??o?oo?o?o?xo?xooo?ooooo?ox??o?oo????x"
4
Returns: 65536
"oo??x?oxo?x?xx?x?xxxxxxx??xxx?x???x?x??x"
5
Returns: 0
"o????ooo??xo??o?oo??o?oxo?o?o?ooxooo?oox"
6
Returns: 65519
"ox??oxxxxxx??x?xxxo???x?x?x??x??ox?xxx?x"
2
Returns: 1
"o??ooo?oo????oooo??o?x?o???xoooo??xoooox"
3
Returns: 65535
"ox?x????xx?xxxxx?x?xxxoxx?x?x????xo?o?xx"
10
Returns: 0
"oooo??o??oo?ooo?o?x?o??oxo?oo??ox?ooo??x"
9
Returns: 65336
"o?o??xx?o??xxx?xx?xxxx?x?x?xo?x?x?x?xx?x"
9
Returns: 0
"ooo?o???ooxo?oxo?o?x?o?o????oo??oo?oooox"
5
Returns: 65525
"oxx??x?ox???x?x?xx?xxo?xxxxx?x??xx???xox"
9
Returns: 0
"ooox?oxoo?o?o???o?o?o??oo?ox???oo??oooox"
10
Returns: 64840
"o??????????????????????????????????????x"
2
Returns: 143548512057