差别在 main 中:
AC
#include <bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
typedef long long lnt;
struct my_stream {
int x;
operator int() {
scanf("%d", &x);
return x;
}
} __rp_read;
#define input() __rp_read
const int N = 3e2 + 10;
int sg[N][N];
bool vis[N][N], is[N * N];
int dfs(int w, int h) {
if (vis[w][h]) return sg[w][h];
vis[w][h] = true;
if (w == 2 && h == 2) return sg[w][h] = 0;
for (int i = 2; i <= w - 2; ++i) is[dfs(i, h) ^ dfs(w - i, h)] = true;
for (int i = 2; i <= h - 2; ++i) is[dfs(w, i) ^ dfs(w, h - i)] = true;
while (is[sg[w][h]] == 1) sg[w][h]++;
for (int i = 2; i <= w - 2; ++i) is[dfs(i, h) ^ dfs(w - i, h)] = false;
for (int i = 2; i <= h - 2; ++i) is[dfs(w, i) ^ dfs(w, h - i)] = false;
return sg[w][h];
}
int main() { //
for (int i = 2; i <= 200; ++i) {
for (int e = 2; e <= 200; ++e) {
dfs(i, e);
}
}
int w, h;
while (scanf("%d%d", &w, &h) != EOF) {
puts(sg[w][h] ? "WIN" : "LOSE");
}
return 0;
}
WA
#include <bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
typedef long long lnt;
struct my_stream {
int x;
operator int() {
scanf("%d", &x);
return x;
}
} __rp_read;
#define input() __rp_read
const int N = 3e2 + 10;
int sg[N][N];
bool vis[N][N], is[N * N];
int dfs(int w, int h) {
if (vis[w][h]) return sg[w][h];
vis[w][h] = true;
if (w == 2 && h == 2) return sg[w][h] = 0;
for (int i = 2; i <= w - 2; ++i) is[dfs(i, h) ^ dfs(w - i, h)] = true;
for (int i = 2; i <= h - 2; ++i) is[dfs(w, i) ^ dfs(w, h - i)] = true;
while (is[sg[w][h]] == 1) sg[w][h]++;
for (int i = 2; i <= w - 2; ++i) is[dfs(i, h) ^ dfs(w - i, h)] = false;
for (int i = 2; i <= h - 2; ++i) is[dfs(w, i) ^ dfs(w, h - i)] = false;
return sg[w][h];
}
int main() { //
int w, h;
while (scanf("%d%d", &w, &h) != EOF) {
puts(dfs(w, h) ? "WIN" : "LOSE");
}
return 0;
}