5892. 石子游戏 IX - 力扣(LeetCode) (leetcode-cn.com)
class Solution {
public boolean stoneGameIX(int[] stones) {
int n = stones.length;
int[] cnt = new int[3];
for (int i = 0; i < n; i++) {
stones[i] %= 3;
cnt[stones[i]]++;
}
if (canAliceWin(1, cnt) || canAliceWin(2, cnt)) return true;
return false;
}
private boolean canAliceWin(int start, int[] cnt) {
int[] cnt2 = new int[3];
for (int i = 0; i < 3; i++) {
cnt2[i] = cnt[i];
}
int turn, sum;
if (cnt2[start] == 0) return false;
cnt2[start]--;
sum = start;
turn = 1;
while (true) {
if (cnt2[0] > 0) {
cnt2[0]--;
} else if (cnt2[sum] > 0) {
cnt2[sum]--;
sum = (sum + sum) % 3;
} else {
break;
}
turn = 1 - turn;
}
if (cnt2[0] + cnt2[1] + cnt2[2] == 0) return false;
return turn == 1;
}
}