Skip to content

Commit 2a93e19

Browse files
authored
Create 1900-the-earliest-and-latest-rounds-where-players-compete.js
1 parent 0d1d9e4 commit 2a93e19

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/**
2+
* @param {number} n
3+
* @param {number} firstPlayer
4+
* @param {number} secondPlayer
5+
* @return {number[]}
6+
*/
7+
const earliestAndLatest = function (n, firstPlayer, secondPlayer) {
8+
const { max, min } = Math
9+
const hash = {}
10+
function dp(l, r, m) {
11+
const key = `${l}${r}${m}`
12+
if (hash[key] != null) return hash[key]
13+
if (l > r) return dp(r, l, m)
14+
if (l === r) return [1, 1]
15+
let nxt_m = (m + 1) >> 1
16+
let ans = [n, 0]
17+
for (let i = 1; i < l + 1; i++) {
18+
let l_win = i - 1,
19+
l_lose = l - i
20+
for (
21+
let j = max(r - ~~(m / 2) - 1, 0) + l_lose + 1;
22+
j < min(r - 1 - l_win, nxt_m - i) + 1;
23+
j++
24+
) {
25+
let tmp = dp(i, j, nxt_m)
26+
ans = [min(ans[0], tmp[0]), max(ans[1], tmp[1])]
27+
}
28+
}
29+
hash[key] = [ans[0] + 1, ans[1] + 1]
30+
return hash[key]
31+
}
32+
33+
return dp(firstPlayer, n - secondPlayer + 1, n)
34+
}

0 commit comments

Comments
 (0)