LeetCode 1927. Sum Game

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
bool sumGame(string num) {
int n = num.size();
int a = 0, b = 0, ax = 0, bx = 0;
for (int i = 0; i < n / 2; ++i)
if (num[i] == '?') ++ax;
else a += num[i] - '0';
for (int i = n / 2; i < n; ++i)
if (num[i] == '?') ++bx;
else b += num[i] - '0';
int x = ax + bx;
if (x & 1) return true;
int xa = (ax + 1) / 2, xb = x / 2 - xa, ya = ax - xa, yb = bx - xb;
// [a, ya * 9 + a], [xb * 9 + b, xb * 9 + b + yb * 9] // Alice focus on minizing a.
if (ya * 9 + a < xb * 9 + b) return true;
// [xa * 9 + a, xa * 9 + a + xb * 9], [b, yb * 9 + b] // Alice focus on maxmizing a.
if (xa * 9 + a > yb * 9 + b) return true;
return false;
}
};